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';
}
}