Codeforces1303B. National Project 求余周期 C. Perfect Keyboard 字符串vector,set,map模拟

在这里插入图片描述
3
5 1 1
8 10 10
1000000 1 1000000

5
8
499999500000

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+5;
ll n,g,b,t;
string s;
int main(){
	cin>>t;
	while(t--){
		cin>>n>>g>>b;
		ll num=(n+1)/2,res=0;
	
		res=(num-1)/g*(g+b)+(num%g?num%g:g);
		cout<<max(res,n)<<endl;
	}

	return 0;
}

C
一行row 26个字母的键盘 输入密码必须在当前键相邻左边或者右边 给一个字符串s 能否实现这样的键盘?
s中相邻字符保证不一样

vector实现左插右插
map实现ll,char对应字母
set放已出现过的字母 分离未出现过的字母
5
ababa
codedoca
abcda
zxzytyz
abcdefghijklmnopqrstuvwxyza

YES
bacdefghijklmnopqrstuvwxyz
YES
edocabfghijklmnpqrstuvwxyz
NO
YES
xzytabcdefghijklmnopqrsuvw
NO

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+5;
ll n,g,b,t;
string s;
map<ll,char> m;
void solve(){
	ll p=0,f=0;
	set<ll> q;
	vector<ll> v;
	q.insert(s[0]-'a');
	v.push_back(s[0]-'a');
	for(int i=1;i<s.size();i++){
		if(!q.count(s[i]-'a') && p==0)	//不存在 p在最左端 
		{
			q.insert(s[i]-'a');
			v.insert(v.begin(),s[i]-'a');//插入vector首部  insert
			p=0;
		}
		else if(!q.count(s[i]-'a') && p==v.size()-1){ //不存在 p在最右端 
			q.insert(s[i]-'a');
			v.push_back(s[i]-'a');
			p++;
		}
		else if(q.count(s[i]-'a')){//不可能有相邻2位重复字母 
			if(s[i]-'a' == v[p-1])	//p的左边 
				p=p-1;
			else if(s[i]-'a' == v[p+1])	//p的右边 
				p=p+1; 
			else	//v[-1] v[v.size()] 不可能与s[i]-'a'一样 
			{
				f=1;
				break;
			}
		}
		else	//未出现过 无法加在左右两端 
		{
			f=1;
			break;
		}
	} 
	if(f)
		cout<<"NO"<<endl;
	else{
		cout<<"YES"<<endl;
		for(int i=0;i<v.size();i++){
			cout<<m[v[i]];
		} 
		for(int i=0;i<=25;i++){
			if(!q.count(i))
				cout<<m[i];
		}
		cout<<endl;
	}
}
int main(){
	for(int i=0;i<=25;i++){
		m[i]='a'+i;
//		cout<<m[i]<<" ";
	}
//	cout<<endl;
	cin>>t;
	while(t--){
		cin>>s;
		solve();
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值