广东工业大学“文远知行杯”程序设计竞赛 部分题解(待补充)

这篇博客介绍了广东工业大学‘文远知行杯’程序设计竞赛的部分题解,包括字符串统计、博弈论问题、数学题和模拟题。题目涉及算法、数据结构和博弈论策略,例如拯救小a问题、母牛轮盘赌博弈和中学数学题等。通过分析和解题思路,帮助读者理解和解决问题。
摘要由CSDN通过智能技术生成

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)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值