A题:https://codeforces.com/contest/1281/problem/A
题意:这道题的话,是让你求出题里所给的字符串是属于哪个国家的语言。
思路:我们判断一下即可。
AC代码:
#include <bits/stdc++.h>
typedef long long ll;
const int maxx=10010;
const int inf=0x3f3f3f3f;
using namespace std;
char a[maxx];
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>a;
int alen=strlen(a);
if(a[alen-1]=='o')
cout<<"FILIPINO"<<endl;
else if(a[alen-1]=='a')
cout<<"KOREAN"<<endl;
else
cout<<"JAPANESE"<<endl;
}
return 0;
}
B题:https://codeforces.com/contest/1281/problem/B
题意:这道题的话就是给你两个字符串,让你按照字典序进行替换,看看能不能让前面的字符串小与后面的字符串。
思路:先将要被替换的字符串进行sort排序,这样我们就能得到每个位置上交换的最小字符,然后进行交换即可。
AC代码:
#include <bits/stdc++.h>
typedef long long ll;
const int maxx=10010;
const int inf=0x3f3f3f3f;
using namespace std;
string a,b;
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>a>>b;
if(a<b)
{
cout<<a<<endl;
continue;
}
string s=a;
sort(s.begin(),s.end());
int flag=0;
for(int i=0;i<a.size();i++)
{
if(a[i]>s[i])
{
for(int j=i+1;j<a.size();j++)
{
swap(a[i],a[j]);
if(a<b)
{
cout<<a<<endl;
flag=1;
i=a.size();
break;
}
swap(a[i],a[j]);
}
}
}
if(!flag)
cout<<"---"<<endl;
}
return 0;
}
C题:https://codeforces.com/contest/1281/problem/C
题意:这道题的话,给你一系列操作问你,经过这些操作之后的字符串是什么样子的。
思路:思路的话就是直接模拟,当字符串大于等于x的时候停止模拟即可。
AC代码:
#include <bits/stdc++.h>
typedef long long ll;
const int maxx=10010;
const int inf=0x3f3f3f3f;
const int mod=1e9+7;
using namespace std;
int main()
{
int t,x;
string s;
cin>>t;
while(t--)
{
cin>>x>>s;
int slen=s.size();
for(int i=0; i<x; i++)
{
int len=s[i]-'0';
if(slen<x)
{
for(int j=1; j<len; j++)
{
if(s.size()<x)
{
for(int z=i+1; z<slen; z++)
{
if(s.size()<x)
s+=s[z];
}
}
}
}
int d=(slen-i-1+mod)%mod;
slen=((i+1)+(ll)d*len)%mod;
}
cout<<slen<<endl;
}
return 0;
}
D题:https://codeforces.com/contest/1281/problem/D
题意:这道题的话,题意是给你n行m列的矩阵,矩阵里只存在'A'和'P',然后问你最少需要几步能把整个矩阵全变成'A'。
思路:思路的话,就是我们要分情况讨论,遍历每一行每一列,分别讨论'A'在两端,在中间,还是一行全是的情况。而且我们能判断出如果可以的情况下,步数的范围区间是[0,4]。
AC代码:
#include <bits/stdc++.h>
typedef long long ll;
const int inf=0x3f3f3f3f;
const int maxn=10010;
using namespace std;
int t,n,m;
char a[maxn][maxn];
int main()
{
cin>>t;
while(t--)
{
int foundA=0, foundP=0, ans=4;
cin>>n>>m;
for (int i=1; i<=n; i++)
{
for (int j=1; j<=m; j++)
cin>>a[i][j];
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
if (a[i][j]=='A')
foundA=1;
else
foundP=1;
}
if(!foundA)
{
cout<<"MORTAL"<<endl;
continue;
}
if(!foundP)
{
cout<<"0"<<endl;
continue;
}
for(int i=1; i<=n; i++)
{
int maxx=-1, minn=1000;
for(int j=1; j<=m; j++)
{
maxx=max(maxx,(int)a[i][j]);
minn=min(minn,(int)a[i][j]);
if(a[i][j]=='A')
{
int t=4;
if(i==1 || i==n)
t--;
if(j==1 || j==m)
t--;
ans=min(ans,t);
}
}
if(maxx==minn && maxx=='A')
{
if(i==1 || i==n)
ans=min(ans,1);
else
ans=min(ans,2);
}
}
for(int j=1; j<=m; j++)
{
int maxx=-1, minn=1000;
for(int i=1; i<=n; i++)
{
maxx=max(maxx,(int)a[i][j]);
minn=min(minn,(int)a[i][j]);
}
if(maxx==minn && maxx=='A')
{
if (j==1 || j==m)
ans=min(ans,1);
else
ans=min(ans,2);
}
}
cout<<ans<<endl;
}
return 0;
}