第三届广西大学东信杯题解(感谢中国东信爸爸赞助支持)

本文解析了广西大学第三届程序设计竞赛(新生组)的七道题目,包括竞赛题目的思路、代码实现及关键技巧。涵盖了博弈论、模拟题、几何数学等主题。

引流广西东信杯

“中国东信杯”广西大学第三届程序设计竞赛(新生组)”
https://ac.nowcoder.com/acm/contest/10172?&headNav=www#rank
密码:2020gxuacm19

公共题第一题:A++++

题解:判定na和in的最小值。
如果用char string[200]存的话就很简单了
开两个计数器,读string[0]是i或者n
然后求两个计数器的最小值。总用时八分钟,主要读歪题了
#include<iostream>
#include<stack>
#include<string>
#include<cstring>
#include<algorithm>
//这个是大整数,一般打竞赛long long不容易爆数据int
#define ll long long 
#define N 100000
using namespace std;
int main(){
   
   
//关闭流同步,比赛代码,因为cin比scanf慢,会被time limited exceed
     ios::sync_with_stdio(false);
     ll n=0;
     //等效于scanf("%lld",&n);
     cin>>n;
     while(n--){
   
   
     	ll t,count1=0,count2=0;
     	cin>>t;
     	while(t--){
   
   
		 	char s[40];
		 	cin>>s;
		 	if(s[0]=='i')count1++;
		 	if(s[0]=='n')count2++;
		 }
		 //等效printf("A");
		 cout<<'A';
		 //判定两个计数器哪个数字小,把小的打进count1
		 count1=min(count1,count2);
		 while(count1--){
   
   
		 	cout<<'+';
		 }
		 cout<<endl;//回车不能丢
     }
}

第二题:GDP Carry

博弈论,题目和题面毫无干系的题
推理一个结果。已知先手只能走奇数步,后手只能走偶数步
就可以猜测是和奇偶性有关的博弈。我们大胆讨论:
1.如果是总和是奇数,那么龙老板赢定了,因为他一次可以拿完。
2.如果总和是偶数,那么龙老板要怎么样赢呢?偶数=奇数+奇数
3.而一旦出现了奇数,那么光依靠小西肯定是不能使得剩下的步数变成偶数
也就是说,龙老板必然还可以走一步。
总结:
只要步数中有一个奇数步
那么龙老板必然可以走一步
那么小西就必然不能让龙老板在他之前停下。龙老板赢
#include<iostream>
#include<stack>
#include<string>
#include<cstring>
#include<algorithm>
#define ll long long 
#define N 1000005
ll x[N]={
   
   };
ll sum[N]={
   
   };
bool flag=false;
using namespace std;
int main(){
   
   
//关闭流同步
     ios::sync_with_stdio(false);
     ll n=0;
     cin>>n;//等效scanf
     for(ll i=1;i<=n;i++){
   
   
     cin>>x[i];
     if(x[i]&1)flag=true;
     //x[i]&1是判定奇偶的快速方法,比较实用,可以加速60倍
     }
     if(flag)cout<<"Antinomy"<<endl;
     //等效prinf("Antinomy");
     else cout<<"XiJam"<<endl;
}

第三题: Interpretability

几何数学题。已知边长为1 2 4 8等比数列下去的边有f1 f2 f3条,求可以组成多少个三角形。
数学有一个三角形的初中结论:a+b>c任意成立。
而在本题中,变成了等腰三角形b>=a,(其中b为腰)
很多人会下意识考虑等边三角形作为第一种情况,其实大错特错。
实际上这题应该把所有等边三角形看成等腰三角形
举个例子1 1 1 6,
如果把6条权值为8的边考虑成等边就会丢掉三条边。
而如果考虑成等腰的话,那么值8的边可以组成三个等腰,和剩下的小边组成等腰三角形。
因此,这题应当优先考虑等腰的边,而不是等边。
#include<iostream>
#include<stack>
#include<string>
#include<cstring>
#include<algorithm>
#define ll long long 
#define N 1000005
ll x[N]={
   
   };
ll sum[N]={
   
   };
bool flag=false;
using namespace std;
int main(){
   
   
     ios::sync_with_stdio(false);
     ll n=0,count1=0;
     ll count2=0;
     ll count3=0;
     cin>>n;
     for(ll i=1;i<=n;i++){
   
   
     cin>>x[i];
     //利用迭代循环实现不断判定等腰三角形存在的情况
     while(x[i]>=2&&count2>=1){
   
   
     	count2--;
	 	x[i]-=2;
	 	count1++;
		 }
		 //剩下的就变成了底边,真的等边三角形
     count2+=x[i]%3;
     count1+=x[i]/3;
    }
    cout<<
中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届程序设计竞赛(同步赛)题解中国东信广西大学第四届
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值