引流广西东信杯
“中国东信杯”广西大学第三届程序设计竞赛(新生组)”
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<<

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





