2024年暑假第一周周报

Consecutive

#include<bits/stdc++.h>
using namespace std;
int n,q,g=0;
string s;
int a[300005];
int main(){
    int l,r;
	cin>>n>>q;
    cin>>s;
    for(int i=0;i<n-1;i++){
        if(s[i]==s[i+1]){
            a[i+1]=1;
        }
        a[i+1]+=a[i];
    }
	while(q--){
		cin>>l>>r;
        g=a[r-1]-a[l-1];
		printf("%d\n",g);
	}
	return 0;
}

这道题当时的前缀和没用好一直错,主要是下标没弄清:还有另一种就是s字符串加个空格,下标从1开始就更简单一些。

To 3

#include <bits/stdc++.h>
using namespace std;

const int inf = 1e18;

int main() {
    string s;
    cin>>s;
    int a=(int)s.size();
    int x=inf;
    for(int t=0;t<=(1<<a)-1;t++){
        string b;
        for(int i=0;i<a;i++)
            if(t&(1<<i)) b+=s[i];
        if(b.empty()) continue;
        if(stoll(b)%3==0)
            x=min(x,a-(int)b.size());
    }
    if(x==inf) cout<<-1;
    else cout<<x;
    return 0;
}

看到这道题的时候不太会用二进制枚举,然后去学习了一下,懂得了二进制枚举

Bowls and Dishes

#include <bits/stdc++.h>

using namespace std;

int a[106],b[106];
int c[106],d[106];
bool ball[106];

int main() {
   
    int n, m;
    cin>>n>>m;
    for(int i=0;i<m;i++){
        cin>>a[i]>>b[i];
    }
    int k;
    cin>>k;
    for(int i=0;i<k;i++){
        cin>>c[i]>>d[i];
    }

    int sum=0;
    for (int t=0; t<=(1<<k)-1; t++) {
        memset(ball,false,sizeof(ball));
        for (int i=0;i<k;i++){
            if(t&(1<<i)) ball[c[i]]=true;
            else ball[d[i]]=true;
        }
        int ans=0;
        for (int i=0;i<m;i++)
           if(ball[a[i]]&&ball[b[i]]) ans++;
        sum=max(sum,ans);
    }
    cout<<sum;

    return 0;
}

这道题也是二进制枚举,然后中间用memset重置ball数组

这篇还没完成,因为还有很多题看完题解有思路了,但是中间有些小知识点不太会,代码没有补全,我在认真学习后会把代码代码补全,把这个周报写完整写完整,还在学习中,知识点还差挺多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值