Codeforces Round #785 (Div. 2)

A. 让a每次拿 n-1个 如果是1 特判一下

#include <bits/stdc++.h>
using namespace std;
//#define int long long
#define pb push_back
#define ll long long
#define L(i,j,k) for(ll i=(j);i<=(k);++i)
#define R(i,j,k) for(ll i=(j);i>=(k);--i)
const int INF=0x3f3f3f3f;
const int N=1e5+10,M=1e6+10;
int a[200];
void solve(){
	string s;cin>>s;int sum=0;
	for(int i=0;i<s.size();i++){
		sum+=(s[i]-'a'+1);
	} 
	if(s.size()==1){
		cout<<"Bob"<<" "<<s[s.size()-1]-'a'+1<<'\n';return ;
	}
	if(s.size()%2==1){
		if(s[0]>s[s.size()-1])sum-=2*(s[s.size()-1]-'a'+1);
	    else sum-=2*(s[0]-'a'+1);
	}
	cout<<"Alice "; 
	cout<<sum<<'\n';
}

signed main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
	int t;cin>>t;
	//int t=1;
	while(t--){
		solve();
	}
}  

B. 这题vp的时候发现卡了很多人  暴力肯定T 我们只要让两个相同的字符他们的区间内出现所有字符的种类即可 我们只要每次把不同的都存起来 因为合理的方式肯定是无论怎么走都是开始和结尾都是一样的 就是如果一个字符出现了两次 那么他肯定是把所有不同的都走了一次

#include <bits/stdc++.h>
using namespace std;
//#define int long long
#define pb push_back
#define ll long long
#define sz(i) (i).size()
#define mem(i,j) memset(i,j,sizeof(i))
#define L(i,j,k) for(ll i=(j);i<=(k);++i)
#define R(i,j,k) for(ll i=(j);i>=(k);--i)
const int INF=0x3f3f3f3f;
const int N=2e5+10,M=1e6+10;
int vis[30],mp[N];
void solve(){
	mem(vis,0);bool ok=0;
	string s;cin>>s;
	vector<char> v;
	for(int i=0;i<sz(s);i++){
		if(vis[s[i]-'a']==0){
			if(ok==1){
				cout<<"NO\n";return ;
			}
			v.pb(s[i]);vis[s[i]-'a']=1;
		}
		else{
			ok=1;
			for(int j=0;j<sz(v)&&i<sz(s);j++){
				if(s[i]!=v[j]){
					cout<<"NO\n";return ;
				}
				i++;
			}
			i--;
		}
	}
	cout<<"YES\n";
}

signed main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
	int t;cin>>t;
	//int t=1;
	while(t--){
		solve();
	}
}  

C. 完全背包模板

#include <bits/stdc++.h>
using namespace std;
//#define int long long
#define pb push_back
#define ll long long
#define sz(i) (i).size()
#define mem(i,j) memset(i,j,sizeof(i))
#define L(i,j,k) for(ll i=(j);i<=(k);++i)
#define R(i,j,k) for(ll i=(j);i>=(k);--i)
#define rep(i,j,k) for(ll i=(j);i<=(k);i++)
const int INF=0x3f3f3f3f;
const int mod=1e9+7;
const int N=4e4+10,M=1e6+10;
int vis[30],mp[N];
ll f[N];
int main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
	int t;cin>>t;
	//int t=1;
	string s,tt;vector<int> v;
	rep(i,1,40000){
		s=to_string(i);
		tt=s;reverse(tt.begin(),tt.end());
		if(s==tt)v.pb(i);
	}
	f[0]=1;
	rep(i,1,sz(v)){
		int a=v[i-1];
		rep(j,a,40000){
			f[j]=(f[j]+f[j-a])%mod;
		}
	}
	
	while(t--){
		int n;cin>>n;
	cout<<f[n]<<'\n';
	}
}  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值