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



京公网安备 11010502036488号