1.可以排序后判断字母和字符串长度
#include<bits/stdc++.h>
using namespace std;
int t;
string s;
int main()
{ cin>>t;
for(int i=1;i<=t;++i)
{
cin>>s;
sort(s.begin(),s.end());
if(s.size()==5&&s[0]=='B'&&s[1]=='a'&&s[2]=='d'&&s[3]=='i'&&s[4]=='u')
cout<<"Yes";
else
cout<<"No";
cout<<"\n";
}
}
2.模拟染色,注意判断合法性’
#include<bits/stdc++.h> using namespace std; #define maxx 600 int n,a,b,m,k; char c; char all[maxx][maxx]; void ran(int i,int j,char ra) { if(i<1||i>n) return; if(j<1||j>m) return; all[i][j]=ra; } int main() { cin>>n>>m>>k; for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) all[i][j]='.'; for(int i=1;i<=k;++i) { cin>>a>>b>>c; for(int i=-2;i<=2;++i) ran(a+i,b,c); for(int i=-2;i<=2;++i) ran(a,b+i,c); } for(int i=1;i<=n;++i) {for(int j=1;j<=m;++j) cout<<all[i][j]; cout<<"\n"; } }3.可以计算每一项除了本项的和对x取模,后计算x与此值的差,即s%x=差(s<=p)就可以保证倍数,即(p-差)%x=0,个数为p-差/x+1,同时判断不修改是否合法。
#include<bits/stdc++.h> using namespace std; #define maxx 100600 int n,p,x,sum,a; int all[maxx]; int main() { cin>>n>>p>>x; for(int i=1;i<=n;++i) {cin>>all[i]; sum=(sum+all[i])%x; } for(int i=1;i<=n;++i) { a=(sum-all[i]%x+x)%x; a=x-a; a=p-a; if(a<0) continue; ans=ans+a/x+1; if(sum%x==0&&all[i]<=p) --ans; } cout<<ans; }4.计算最近匹配括号,用栈来模拟,最近匹配括号同时成为了所有最长权值的匹配括号下的子括号,因为贪心的想,最近匹配括号对整体的影响最小。
#include<bits/stdc++.h> using namespace std; int a,ans; string s; stack<int> S; int main() { cin>>s; for(int i=0;i<s.size();++i) { if(s[i]=='(') S.push(i); else { if(S.size()!=0) {a=S.top(); S.pop(); ans=ans+(s.size()-i)*(a+1); } } } cout<<ans*2; }