做网站哪种语言好,小微企业网站建设,淘宝seo是什么意思,onethink wordpressA. Special Characters#xff08;Problem - A - Codeforces#xff09;
题目大意#xff1a;给定一个正整数n#xff0c;需要输出一个字符串s#xff0c;s中需要有n个满足要求的字符#xff0c;对于字符的要求#xff1a;对于该字符#xff0c;它的左右有且仅有一个字…A. Special CharactersProblem - A - Codeforces
题目大意给定一个正整数n需要输出一个字符串ss中需要有n个满足要求的字符对于字符的要求对于该字符它的左右有且仅有一个字符与它相同。如果这样的字符串不存在的话输出NO。
思路这题如果我们有一串相同的字符显然只有最左边和最右边两个字符是合法字符不管这串字符有多长但它只有大于等于2才是有效的所以当n为偶数的时候我们输出n/2组两个字符相同的就可否则就不成立。输出的时候记得每输出两个后换一种字符。
#includebits/stdc.h
using namespace std;
int main()
{int t;scanf(%d,t);while(t--){int n;scanf(%d,n);if(n1) printf(NO\n);else{printf(YES\n);for(int i0;in/2;i){char cAi%26;printf(%c%c,c,c);}printf(\n);}}
}
B. Array FixProblem - B - Codeforces
题目大意给定一个n长的数组a[],这些数都是一位数或者两位数对数组中的每个两位数我们可以将它拆成两个数最后要保证数组是一个非降数组。
思路我们从前往后看拆的条件显然是后一个数小于前一个数但是这里有一个bug比如对于a,b,c三个数我们在访问a的时候发现ba那么a是不用拆的但是如果bc那么b要拆拆了前面a和b的关系就不满足了所以我们不能从前往后判断那么我们换一下从后往前判断呢这样显然就可以了因为前面的数拆了也不影响后面的数大于等于它的条件。还有一个容易忽略的点在于这个数拆了之后自身的两个数是不满足条件的一定要记得判断。
#includebits/stdc.h
using namespace std;
int a[100];
int main()
{int t;scanf(%d,t);while(t--){int n;scanf(%d,n);for(int i1;in;i) scanf(%d,a[i]);int lasta[n];int flag1;for(int in-1;i1;i--){if(lasta[i]) lasta[i];else{//a[i]可能只有一位//a[i]自己拆完不满足if(a[i]%10last || a[i]/100 || a[i]/10a[i]%10) {flag0;break;}else lasta[i]/10;}}if(flag) printf(YES\n);else printf(NO\n);}
}
C. Arrow PathProblem - C - Codeforces
题目大意现在有一个2行n列的矩阵矩阵的每一格都有一个向左或者向右的方向机器人最开始在(1,1)位置它每次可以向上下左右四个方向移动移动之后又会按照当前格中的方向进行移动问最后它能否到达(2,n)位置。
思路对于这种操作那么我们就需要看哪些操作是有效的哪些操作是无效的。显然如果它向右移然后右边的格子的字符是向左那不管它怎么向右移动都是无效的。那么对于向下操作呢显然也需要它下面的那一个是向右的否则它就会被送到左下格往前就是无效操作往上要么被往左送要么又回到刚刚下来的位置。对于向上操作也是一样上面那一格一定要是向右的我原本觉得向上操作是没必要的但实际上如果两行交替着出现向左的格子那么可以一会儿上一会儿下的避开。往左操作就真的是无效的了。
#includebits/stdc.h
using namespace std;
char s[3][200010];
int main()
{int t;scanf(%d,t);while(t--){int n;scanf(%d,n);scanf(%s%s,s[1]1,s[2]1);int x1,y1;while(!(x2yn)){if((x2y1n)||(x1yn))break;if(s[x][y1])y2;else//这里是向右不能移动只能向上或者向下移动的情况如果还不行那么确实移动不到{x1;if(x3) x1;if(s[x][y]) y1; else break;}}if(x2yn) printf(YES\n);else printf(NO\n);}
}
D. Tandem Repeats?Problem - D - Codeforces
题目大意给定一个字符串我们需要找到最长的偶数长子串使得子串的前半段完全等于后半段。问这样的子串最长有多长。
思路这题说前半段等于后半段我还以为是kmp但比赛那会儿时间太紧了没写出来比赛结束后才发现我高看它了根本就用不着kmp我们只要枚举子串一半的长度对于每个长度从s的第一个字符开始找s[i]s[ik]就将计数的变量1否则就将计数的变量置为0一旦计数的变量等于k,那么就说明对于这个长度我们找到了一个合法的子串这样一直往后枚举最后就能得到最长的长度。
#includebits/stdc.h
using namespace std;
char s[200010];
int main()
{int t;scanf(%d,t);while(t--){scanf(%s,s1);int cnt0;int nstrlen(s1);for(int k1;k*2n;k){int c0;for(int i1;ikn;i){if(s[i]s[ik]||s[i]?||s[ik]?) c;else c0;if(ck) cntk;}}printf(%d\n,cnt*2);}
}