文章目录
有部分题没做,之后会补的*
A.Polycarp and Coins
传送门
这个题巨简单,太水了,就是找两个数,和等于你输入的那个数,这两个数差的绝对值最小
#include<iostream>
#include<cstring>
#include<cstring>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a;
scanf("%d",&a);
int i,j,b=a/3;
int sum=0;
for(i=b;sum!=a;i++)
{ sum=0;
for(j=b;sum<a;j++)
{
sum=i+2*j;
if(sum==a)
break;
}
}
printf("%d %d\n",i-1,j);
}
}
B.Wonderful Coloring - 1
传送门
本题是简单的涂色问题红色,蓝色和不涂,就是相同的字母不能有相同的颜色(不涂除外),所以只需要知道,字母出现一次的除以二,然后加上出现两次及以上的字母的个数就好,不难
#include<iostream>
#include<cstring>
#include<cstring>
using namespace std;
char a[51];
int b[26];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{ getchar();
scanf("%s",&a);
int l=strlen(a);
int sum=0,i;
for(i=0;i<l;i++)
{
b[a[i]-'a']++;
}int c=0;
for(i=0;i<26;i++)
{
if(b[i]==1)
sum++;
if(b[i]>=2)
c++;
}
printf("%d\n",c+sum/2);
memset(b,0,sizeof(b));
memset(a,0,sizeof(a));
}
}
C.Wonderful Coloring - 2 *
D.Interesting Story *
E.Running for Gold*
F.Backspace
传送门
本题大意:就是先给你个字符串,你再重新输入,你输入可以正常输入,也可以不输入那个字母,改为按下删除键,相当于有两个字符被删除,一个是本该输入的字符,一个是前面的那个字符,再给你若干例子,比较是否可以得到该例子;
思路:从末尾开始判断,如果不是原字符串就向前挪两位,然后继续判断
#include<iostream>
#include<cstring>
#include<cstring>
using namespace std;
char a[100010];
char b[100010];
int l1,l2;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{ getchar();
scanf("%s",&a);
getchar();
scanf("%s",&b);
l1=strlen(a);
l2=strlen(b);
if(l2>l1)
printf("NO\n");
else if(l1==l2)
{
if(strcmp(a,b)==0)
printf("YES\n");
else printf("NO\n");
}
else { int i,j=l1-1;
for(i=l2-1;i>=0;)
{
if(b[i]==a[j])
i--,j--;
else
j-=2;
if(j<0)
break;
}
if(i==-1)printf("YES\n");
else printf("NO\n");
}
}
}