这场是标标准准的自闭场。不过算是完成了上青色的目标。总之不亏吧。
A. Common Prefixes
原题:https://codeforces.ml/contest/1384/problem/A
题意:给你一些数字,你构造一些字符串,让他们有这样数字的公共前缀
解法:这题手速可以,要不是手速快点就真自闭了。构造任意字符串,然后根据数字将输入的数字所对应的字符位置改成原字符+1,如果是z就-1.这样就构造完毕了。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
char a[205];
void rlmn()
{
int n;
scanf("%d",&n);
for (int i=0;i<105;i++)
{
a[i]='a';
}
for (int i=0;i<105;i++)
{
printf("%c",'a');
}
printf("\n");
int tmp;
for (int i=0;i<n;i++)
{
scanf("%d",&tmp);
if (a[tmp]=='z')
a[tmp]--;
else
a[tmp]++;
for (int i=0;i<105;i++)
{
printf("%c",a[i]);
}
printf("\n");
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)rlmn();
return 0;
}
C题 String Transformation 1
原题:https://codeforces.ml/contest/1384/problem/C
题意:我读了一个假题。。。给你两个字符串,将前一个字符串的值转化成后一个字符串的值。
转化策略是选择前一个字符串中相同的一些字母转化成同一个字母。
题解:只要暴力从a-t,然后变成对应位置最小的那一个就行了。真的是水题,但是我题目看错了。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
string s1,s2;
void rlmn()
{
int n;
scanf("%d",&n);
cin>>s1>>s2;
for (int i=0;i<n;i++)
{
if (s1[i]>s2[i])
{
printf("-1\n");
return;
}
}
int ans=0;
for (int i=0;i<20;i++)
{
char tmp='z';
int flag=0;
for (int j=0;j<n;j++)
{
if (s1[j]=='a'+i&&s1[j]!=s2[j])
{
flag=1;
tmp=min(tmp,s2[j]);
}
}
for (int j=0;j<n;j++)
{
if (s1[j]=='a'+i&&s1[j]!=s2[j])
{
s1[j]=tmp;
}
}
ans+=flag;
}
printf("%d\n",ans);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)rlmn();
return 0;
}