首页 > 代码库 > 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赛