B——拯救小a
题目描述
小a生活在一个只有26个小写字母的文本里,我们知道在26个小写字母里,a是字典序最小的,所以小a十分的自卑,今天小a实在是受不了了,他想和伙伴们一起逃出这个文本,在逃出之前,他想问问你,这个文本里一共有多少个a?
输入描述:
输入数据有很多行,最后一行以一个单独的"."(不含引号)结束
保证除最后一行外每行数据均只由小写字母构成,并且字母的数量不超过10000
输出描述:
输出仅包含一行一个正整数,表示文本中a的数量
示例1
输入
crystrons
karakuri
shiranui
blackwings
darkmagicion
cyberdragonyyds
.
输出
7
分析:签到题,设定一个全局变量扫描一遍统计即可,用字符串数组或string数组都可
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5;
int main(){
char a[maxn];
int cnt=0;
while(cin>>a){
if(a[0]=='.') break;
for(int i=0;i<strlen(a);i++){
if(a[i]=='a') cnt++;
}
}
cout<<cnt<<endl;
return 0;
}
C——母牛轮盘赌
题目描述
喜欢追求刺激的母牛打算和猪猪来一场紧张刺激的俄罗斯轮盘赌(当然只是用橡胶子弹),败者需要请胜者吃宵夜,他们觉得一枪一枪轮流射击还不够刺激,决定遵循以下规则来轮流向自己扣动扳机。
·可以扣动扳机不多于k+1次,最少1次,k为上一次操作者扣动扳机的次数.
·先手第一次操作能且只能扣动一次扳机
现在子弹已经装在了玩具枪里,并且他们都知道这颗子弹会在第n次扣动扳机时射出,母牛和猪猪都不想输掉这场对决,并且他们都聪明绝顶,会采用最好的策略进行对决。
由母牛发起的对决,自然是母牛先手。
如果母牛能赢下这顿宵夜则输出"Cow",否则"Pig"。
输入描述:
第一行读入一个T,表示T组数据(1<=T<=100).
每组数据读入一个n(1<=n<=1000000).
输出描述:
每组数据输出一个答案,如果母牛能赢下这顿宵夜则输出"Cow",否则"Pig"。
示例1
输入
2
1
2
输出
Pig
Cow
分析;在题解之前,需要介绍博弈论有关概念.以及初步讨论
1.从数据观察来看,已知复杂度就是1e8,也就是说在程序设计里不应该在出现循环或者暴搜,也就是通过判断(找规律)进行解决
****必胜点和必败点**的概念:
P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败。
N点:必胜点,处于此情况下,双方操作均正确的情况下必胜。
它们有如下性质:
1.合法操作集合为空的局面是P-position
2.可以移动到P-position的局面是N-position
3.所有移动都只能到N-position的局面是P-position
有一部分博弈论的题只需要用数学归纳法找出PN状态的一般规律就可以解决,**
思路正是来源于PN状态的寻找
我们先讨论前几枪的状态;
1.只有一颗子弹,母牛啪的一下很快啊把自己给毙了,猪猪胜;
2.有两颗子弹,母牛给自己一枪,猪猪最后枪决自己,母牛胜;
3.有三颗子弹,母牛给自己一枪,猪猪为了赢不会打自己两枪,只打一枪,最后由母牛枪决自己,猪猪胜;
4.有四颗子弹,母牛给自己一枪,猪猪为了赢打自己两枪,最后还是母牛枪决自己,猪猪赢;
5.有五颗子弹,母牛先给自己一枪,如果猪猪先给自己一枪,母牛给自己两枪,最后猪猪终结自己,如果猪猪打两枪,牛打一枪,最后猪猪终结自己,母牛胜。
从上面的例子看出来,在第五例中,对于母牛来说,第一点就是N点,在第四例中,第一点就是P点。在第一例中,对于母牛来说,合法操作为空了,没有在P点以外的选择,符合性质1。
在n>=6时,应用性质2进行讨论。
六颗子弹时,母牛给自己第一枪,猪猪打自己两枪,再此基础上,如果母牛打自己三枪猪猪就胜利,也就是说,第三轮对于猪猪是N点,因为存在一种情况可以使母牛移动到P点,也就是说,没有必要再讨论剩下情况了,一定是猪猪胜利,也就是,无论母牛怎么操作猪猪一定能抢到第三个点,猪猪胜
n=7时.在n=6基础上,最后一枪留给了猪猪
另一种理解方式,如果在第二枪猪猪只打枪,母牛在只打一枪,这时就回到了n=5的状态.还是母牛胜。(状态转移)
在此基础上,n=2,5,710,13…得出规律(我在验证n=10后直接写出结论)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,t=0;
cin>>t;
while(t--){
cin>>n;
cout<<((n%5==0)