首页 > 代码库 > ACMxiao赛
ACMxiao赛
发现赛题里第2个假数据集,先上图笑会
随便玩的 临时账号 named “女装程序员”
简单题的思路都在代码第一行的注释里
第一题 类型转换(签到题)
1 /*输入一个2位小数,输出对应的整数部分*/ 2 #include<iostream> 3 using namespace std; 4 int main() 5 { 6 int n; 7 cin>>n; 8 while(n--) 9 { 10 float a; 11 cin>>a; 12 cout<<int(a)<<endl; 13 } 14 return 0; 15 }
第二题 一种运算(读清题+分支程序设计)
1 /*两个数A和B做4种运算,优先级①<②<③<④ 2 ①若a>b,a+b ②若a<b,a-b ③若a+b为偶数,a*b ④若(a-b)%3==0,a/b 3 两个坑:除法时保留5位小数;除数B=0时输出NaN*/ 4 #include<iostream> 5 #include<iomanip> 6 using namespace std; 7 int main() 8 { 9 int n; 10 cin>>n; 11 while(n--) 12 { 13 int a,b; 14 cin>>a>>b; 15 if(!((a-b)%3)) 16 { 17 if(!b) 18 cout<<"NaN"<<endl; 19 else 20 cout<<setprecision(6)<<a*1.0/b<<endl; 21 } 22 else if(!((a+b)%2)) 23 cout<<a*b<<endl; 24 else if(a<b) 25 cout<<a-b<<endl; 26 else 27 cout<<a+b<<endl; 28 } 29 return 0; 30 }
第三题 字符串处理
1 /*n组数据,每组输入一个字符串,剔除去掉首字符后子串内和首字符相同的字符,输出一个处理后的字符串。*/ 2 #include<iostream> 3 using namespace std; 4 int main() 5 { 6 int n; 7 cin>>n; 8 while(n--) 9 { 10 string s; 11 cin>>s; 12 for(int i=0;i<s.length();i++) 13 { 14 if(i==0) 15 cout<<s[i]; 16 else 17 { 18 if(s[0]!=s[i]) 19 cout<<s[i]; 20 } 21 } 22 cout<<endl; 23 } 24 return 0; 25 }
第四题 蜜蜂探路
1 /*蜜蜂只能爬向右侧相邻的蜂房,不能反向。到前一地点的路数包含在后一地点的路数,变形的斐波那契数列*/ 2 #include <iostream> 3 using namespace std; 4 int s[51]; 5 void dp() 6 { 7 s[1]=1; 8 s[2]=2; 9 for(int i=3;i<=50;++i) 10 s[i]=s[i-1]+s[i-2]; 11 } 12 int main() 13 { 14 int n; 15 cin>>n; 16 dp(); 17 while(n--) 18 { 19 int a,b,t; 20 cin>>a>>b; 21 t=b-a; 22 cout<<s[t]<<endl; 23 } 24 return 0; 25 }
第五题 背包动态规划
开始用假数据集后来改了 用了学妹的程序和输出 之前没有清空数组 再测试的时候最多只对了40% 不知道最后的结果 有空找学妹要下程序
第六题 模拟炉石
题目介绍都2页 我还能说什么 好多人看都没看吧
变量star记录回合数,因为是双方对战,利用回合数%2得到0,1区分双方。当前操作选手用flag标记,取star%2,对手则可以用(flag+1)%2标记。维护2个2*8的数组,因为随从只会加到最右端,要保持数组保持小端紧凑。英雄在这题里没伤害,就忽略了。
a数组记录血量,a[0][]是先手,a[1][]后手,初始化为0,1-7放随从,0放英雄血量。
b数组记录攻击力,先后手同a,初始化为0,1-7对应随从的攻击力,0放随从数量。
先取命令复制给一个string,区分是干什么的就行了,只取第一个字符判别。
不是end的情况下,再取后两个数据。上随从的操作就是队尾(数组)尾插入元素。
攻击相对麻烦一点,先区分成打脸还是打随从,打脸不用计算反伤,打随从要计算。
打随从还要考虑打死还是没打死,打死的要先取它的反伤值,然后紧凑队列,然后计算反伤。把自己反死的也要紧凑队列,没反死的改值。
血量小于等于0的一方判定死亡,游戏结束,所以每次攻击之后检查英雄血量。
最后就是先手剩后手显1,反之为-1,未分胜负为0。
很low的实现
1 /*神坑 要了个数据集结果是错的 100多个数据手工了两次啊*/ 2 #include<iostream> 3 #include<stdio.h> 4 using namespace std; 5 int main() 6 { 7 //freopen("6in.txt","r",stdin); 8 int n,star=0,flag=0; 9 cin>>n; 10 int a[2][8]={0},b[2][8]={0};//a是血量 b是攻击力 11 string s; 12 int x,y,tmp=0; 13 a[0][0]=30,a[1][0]=30; 14 while(star<n) 15 { 16 cin>>s; 17 if(s[0]==‘e‘) 18 { 19 star++; 20 flag=star%2; 21 } 22 else 23 { 24 cin>>x>>y; 25 if(s[0]==‘s‘) 26 { 27 b[flag][0]++; 28 a[flag][b[flag][0]]=y; 29 b[flag][b[flag][0]]=x; 30 } 31 else if(s[0]==‘a‘) 32 { 33 if(y==0)//打脸 34 a[(flag+1)%2][y]=a[(flag+1)%2][y]-b[flag][x]; 35 else//打随从 36 { 37 if((a[(flag+1)%2][y]-b[flag][x])>0) 38 {//打对方 39 a[(flag+1)%2][y]=a[(flag+1)%2][y]-b[flag][x]; 40 tmp=b[(flag+1)%2][y]; 41 } 42 else 43 { 44 tmp=b[(flag+1)%2][y]; 45 for(int i=y;i<b[(flag+1)%2][0];i++) 46 { 47 a[(flag+1)%2][i]=a[(flag+1)%2][i+1]; 48 b[(flag+1)%2][i]=b[(flag+1)%2][i+1]; 49 } 50 a[(flag+1)%2][b[(flag+1)%2][0]]=0; 51 b[(flag+1)%2][b[(flag+1)%2][0]]=0; 52 b[(flag+1)%2][0]--; 53 } 54 if(tmp!=0&&(a[flag][x]-tmp)>0) 55 a[flag][x]=a[flag][x]-tmp; 56 else if(tmp!=0&&(a[flag][x]-tmp)<=0) 57 { 58 for(int i=x;i<b[flag][0];i++) 59 { 60 a[flag][i]=a[flag][i+1]; 61 b[flag][i]=b[flag][i+1]; 62 } 63 a[flag][b[flag][0]]=0; 64 b[flag][b[flag][0]]=0; 65 b[flag][0]--; 66 } 67 tmp=0; 68 } 69 if(a[0][0]<=0||a[1][0]<=0) 70 break; 71 } 72 } 73 } 74 if(a[0][0]<=0&&a[1][0]>0) 75 cout<<"-1"<<endl; 76 else if(a[0][0]>0&&a[1][0]<=0) 77 cout<<"1"<<endl; 78 else 79 cout<<"0"<<endl; 80 cout<<a[0][0]<<endl<<a[1][0]<<endl; 81 return 0; 82 }
ACMxiao赛
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。