浙江农林大学第二十一届程序设计竞赛校选拔赛(同步)

D阿巴阿巴

#include<bits/stdc++.h>
using namespace std;
char str[1002];
int main(){
	int t;
	cin>>t;
	while(t--){
		int n;
		cin>>n>>str;
		int ans=-1;S
		for(int i=0;i<n-7;++i){//剪枝,只能到n-8 
			int k=0;
			for(int j=0;j<8;++j){//维护长度为8 
				if(str[i+j]=='a'){
					k++;
				}
			}
			//求出长度为8的区间内有多少个a,
			//只记录有4个a的,记录到直接跳出循环 
			if(k==4){
				ans=i;
				break;
			}
		}
		if(ans>=0){
			cout<<ans+1<<" "<<ans+8<<endl;//输出需要 
		}
		else{
			cout<<"impossible"<<endl;
		}
	}
	return 0;
}

E俺拜俺拜

#include<bits/stdc++.h>
using namespace std;
char str[10002];
map<int,int> mp;
int n,t,x;
int main(){
	cin>>t;
	while(t--){
		cin>>n>>x;
		cin>>(str+1);
		int flag=0;//标记是否有结果 
		int pre=0;
        mp.clear();//清空map,每处理一个字符串清空一次
		for(int i=1;i<=n;++i){
			if(str[i]=='a'){
				pre++;
			}
			else{
				pre--;
			}
			if(pre==0&&i>=x){
				cout<<1<<" "<<i<<endl;
				flag=1;
				break;
			} 
			//更新map 
			if(mp[pre]==0){
				mp[pre]=i;
			}
			//else出现相等的pre,即map[pre]和i之间ab数量一样,判断区间是否合法>=x 
			else if(i-mp[pre]>=x){
				cout<<mp[pre]+1<<" "<<i<<endl;
				flag=1;
				break;
			}
		}
		if(!flag) cout<<"impossible"<<endl;
	}
	return 0;
} 

G 瓜瓜的特别任务

#include<bits/stdc++.h>
using namespace std;
int main(){
	int t;
	cin>>t;
	while(t--){
		string s;
		cin>>s;
		int n=s.size();
		int ans=1;
		for(int l=1;l<=n;++l){//长度 
			if(n/l<=ans) break;//剪枝优化 
			for(int i=0;i<n;++i){//起点 
				int j=i+l;//终点 
				if(j>=n) break;//剪枝
				string tmp=s.substr(i,l);
				int k=1;//记录循环次数 
				int pos=i;//记录tmp开始位置 
				while(pos+l<n&&tmp==s.substr(pos+l,l)){
					pos+=l;
					k++;
				} 
				ans=max(ans,k);
			} 
		}
		cout<<ans<<endl;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值