Educational Codeforces Round 68 (Rated for Div. 2)

博客介绍了三道算法题的解题思路。‘Remove a Progression’题观察规律,输出第几个偶数;‘Yet Another Crosses Problem’是水题,对行列暴力,用map存图并遍历点判断;‘From S To T’先判断s是否为t子串,剔去t中s字符,看剩余字符能否在c中找到。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A. Remove a Progression

签到题,观察可得规律,每次删除的是奇数,所以只要把x*2输出即可,因为输出第几个偶数

    # include <bits/stdc++.h>
    using namespace std;
     
    typedef long long LL;
    int main()
    {
    	int T;
    	scanf("%d",&T);
    	
    	while(T--){
    		LL n,x;
    		scanf("%lld %lld",&n,&x);
    		printf("%lld\n",x*2);
    		
    	}
    	
    	return 0;
    }

B. Yet Another Crosses Problem

就是一个水题,估计自己打比赛的时候喝了假酒,死活改不出来
对每一行每一列进行暴力,然后将图转化为用map存,然后遍历每一个点判断

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

const int MAXN=5e4+100;
int a[MAXN];
int b[MAXN];
char str[MAXN];
map<int,map<int,int> > mp;
int main()
{
	int T;
	
	scanf("%d",&T);
	while(T--){
		int n,m;
		mp.clear();
		scanf("%d %d",&n,&m);
		int ans=1e6;
		
		for(int i=0;i<max(n,m);i++){
			a[i]=0;
			b[i]=0;
		}
		
		
		for(int i=0;i<n;i++){
			scanf("%s",str);
			for(int j=0;j<m;j++){
				if(str[j]=='*'){
					mp[i][j]=1;
					a[i]++;
					b[j]++;
				}else{
					mp[i][j]=0;
				}
			}
		}
		
		
		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++){
				int d=0;
				d=(n-a[i])+(m-b[j]);
				if(mp[i][j]==0) d--;
				ans=min(ans,d);
			}
		}
		printf("%d\n",ans);
	}
	
	return 0;
}

C. From S To T

首先判断s是不是t的子串,然后将t中的s的字符都剔去,在t中剩下的就是要加入的,再看看是不是可以在c中都找到

    # include <bits/stdc++.h>
    using namespace std;
     
    int ss[30];
    int tt[30];
    int qq[30];
    int main()
    {
    	int T;
    	
    	scanf("%d",&T);
    	while(T--){
    		int flag1=1;
    		int flag2=1;
    		for(int i=0;i<30;i++){
    			ss[i]=0;
    			tt[i]=0;
    			qq[i]=0;
    		}
    		string s,t,q;
    		cin>>s;
    		cin>>t;
    		cin>>q;
    		for(int i=0;i<s.length();i++){
    			ss[s[i]-'a']++;
    		}
    		for(int i=0;i<t.length();i++){
    			tt[t[i]-'a']++;
    		}
    		for(int i=0;i<q.length();i++){
    			qq[q[i]-'a']++;
    		}
    		
    		int ll=0,rr=0;
    		while(ll<t.length()&&rr<s.length()){
    			if(s[rr]==t[ll]) rr++,ll++;
    			else ll++;
    		}
    		if(rr>=s.length()) flag1=1;
    		else flag1=0;
    		
    		//cout<<flag1<<" "<<flag2<<endl;
    		for(int i=0;i<26;i++){
    			int a=tt[i]-ss[i];
    			if(qq[i]<a){
    				flag2=0;
    				break;
    			}
    		}
    		
    		if(flag1&&flag2){
    			printf("YES\n");
    		}else{
    			printf("NO\n");
    		}
    		
    	}
    	
    	return 0;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值