Codeforces 3月10日比赛Round #706
总结:
比赛链接
我这一次呢,是我第一次打ACM赛制,许多东西不懂,还是同机房的同学帮我解释了一下(谢谢那几位同学),还有题目是英文的,有些看不懂就直接百度翻译 ,就懒得自己翻译,省时间。我这次就做了第一题所以我就讲一下第一题的总结吧。
第一题:
这一题我就不放链接了(因为懒),我做这一题的时候,我读了一遍题目就知道了这是一道回文字符串的判断,但是在写代码的时候,由于没有认真分析样例,忘记了对字符串的特殊判断,连续提交错了2次(100分没了!) ,最后只好去问了同学的思路,才知道我少了一个判断。
代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
char c[110];
string a;
int main()
{
int n,m,k;
cin>>n;
for(int i=1;i<=n;i++)
{
bool flag=1;
int cnt=0;
scanf("%d %d",&m,&k);
cin>>a;
int p,q;
if(k*2==m){ //第如果是2倍的关系,怎么都不可能能分割
cout<<"NO"<<endl;
continue;
}
if(k==0){
cout<<"YES"<<endl;
continue;
}
for (p = 0, q = m-1; p <= q; p++,q--)
{
if (a[p] != a[q]) //回文字符串的判断
{
flag = 0;
break;
}
cnt++;
if(cnt == k) //第k+1的字符串因为只出现一次,所以不用管k+1是否是回文
break;
}
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
一些需要注意的点:
- 在做一些模拟或
暴力题时要好好分析样例,样例可能蕴含着一些信息,比如特殊判断,很重要。
就这样吧。