【第十场】
I:Block Breaker
题解:bfs寻找当前位置上下左右四个方向还有方块的位置,是否会存在影响使得方块掉落,计数输出即可。
【第九场】
E:Rikka with Game
题解:如果第一位是z,那么显然先手会选择把z->a,后手显然会把a->b,然后先手会选择结束游戏保证字典序不再变大。如果第一位是y,那么先手肯定不会去把y->z因为这样字典序会变大,后手也不会把y->z因为这样先手就可以把z->a,所以只有三种情况。第一,字符串以z开头,z->b,游戏结束;第二,字符串以y开头(可连续多个),把紧接着的第一个z->b(类型yyza这种),结束;第三,直接结束。
scanf("%s",&s);
for(int i=0;s[i];i++){
if(s[i]=='z'){
s[i]='b'; break;
}
if(s[i]=='y') continue;
else break;
}
printf("%s\n",s);
【第八场】
J:Quailty and CCPC
题解:直接模拟,我怕失精度就用 (d*n)%10==5 判断是否等于0.5。注意队名长度不超过10,数组太长会tle。
if((d*n)%10==5){
sort(f,f+n,cmp);
int pos=d*n/10;
printf("%s\n",f[pos].s);
}
else{
puts("Quailty is very great");
}
【第七场】
【第六场】
因为太难了有点自闭就很咸鱼的没补题dbq我来了
等会。。
L:Stay Real
题解:因为是在最小堆轮流选取编号最大的节点,所以一定是先选完大的才选小的,排序从大到小轮流选取求和输出即可。
【第五场】
F:string matching
题解:拓展KMP裸题,只要考虑最长前后缀匹配是否匹配到最后一步,如果不是就+1再求和即可。
前置知识:字符串的模式匹配算法 —— BF算法、KMP算法和拓展KMP
G:permutation 2
递推式:dp[i]=dp[i-1]+dp[i-3],边界条件: dp[0]=dp[1]=dp[2]=1。
【第四场】
A:AND Minimum Spanning Tree( lowbit(x+1) )
G:Just an Old Puzzle
题解:结论题。数字华容道,必然有解,只存在于如下3个细分情形:
- 若格子列数为奇数,则逆序数必须为偶数;
- 若格子列数为偶数,且逆序数为偶数,则当前空格所在行数与初始空格所在行数的差为偶数;
- 若格子列数为偶数,且逆序数为奇数,则当前空格所在行数与初始空格所在行数的差为奇数。
【第三场】
G:Find the answer(思维+multiset)
【第二场】
E:Everything Is Generated In Equal Probability (推荐一篇详细的博文)
J:Just Skip The Problem
题解:最优方案是一次确定一位,也就是总方案有n!,对mod=1e6+3取模那么小于mod直接暴力求取,否则为0 。
K:Keen On Everything But Triangle(静态主席树)