其他分享
首页 > 其他分享> > 2020劳动节训练赛(4)

2020劳动节训练赛(4)

作者:互联网

A - 两只脑斧  Gym - 102174A

题目大意:口琴,24个孔,三种气息,吸气,呼气,停顿。

思路:无脑打表(我居然wa了一次蠢死了)

代码:

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     char a[101];
 6     int n,ans=0;
 7     cin >> n;
 8     for (int i = 0; i < n; i++) {
 9         char b[10];
10         cin >> b;
11         if ((b[0] - '0') % 2 == 0&& (b[0] - '0')!=0|| (b[0] - '0')==7) {
12             a[ans] = 'I';
13             ans++;
14         }
15         else if ((b[0] - '0') % 2 != 0) {
16             a[ans] = 'E';
17             ans++;
18         }
19         else {
20             a[ans] = 'X';
21             ans++;
22         }
23     }
24     for (int i = 0; i < ans; i++)cout << a[i];
25     cout << endl;
26     return 0;
27 }

 

 

C - 赛尔逵传说   Gym - 102174C

题目大意:,先丢张配图^ ^。回合制,打怪兽,敌人后出手。有水果,能使攻击翻倍,问杀死这些怪兽至少消耗多少hp。

 

思路:贪心+排序。按攻击力排序,血比玩家攻低的直接锤死,血比玩家攻高就嗑药嗑到能一下锤死或者把药嗑完。

代码:

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 struct guaishou {
 4     long long hp, atk;
 5 };
 6 bool cmp(guaishou g1, guaishou g2) {
 7     return g1.atk > g2.atk;
 8 }
 9 guaishou g[100001];
10 int main(){
11     long long n, k, c,sum=0;
12     cin >> n >> k >> c;
13     for (int i = 0; i < n; i++)
14         cin >> g[i].hp >> g[i].atk;
15     sort(g, g + n, cmp);
16     for (int i = 0; i < n; i++) {
17         if (g[i].hp <= k)continue;
18         if (g[i].hp % k == 0) {
19             if (g[i].hp / k - 1 <= c)
20                 c -= (g[i].hp / k - 1);
21             else {
22                 sum += ((g[i].hp / k - 1 - c) * (g[i].atk));
23                 c = 0;
24             }
25         }
26         else if (g[i].hp % k != 0) {
27             if (g[i].hp / k <= c)
28                 c -= (g[i].hp / k);
29             else {
30                 sum += ((g[i].hp / k - c) * (g[i].atk));
31                 c = 0;
32             }
33         }
34     }
35     cout << sum << endl;
36     return 0;
37 }

 

 

 

 

D - 只有一端开口的瓶子   Gym - 102174E 

题目大意:给n个数字的乱序排列,借助k个栈把它们排成升序序列。问最少要几个栈。

思路:模拟栈,易知最多要两个栈,如果发现一个不行,就用两个。

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main() {
 4     int t;
 5     cin >> t;
 6     while (t--) {
 7         int n,ans,a;
 8         cin >> n;
 9         ans = 1;
10         stack<int>q;
11         for (int i = 1; i <= n; i++) {
12             cin >> a;
13             q.push(a);
14             if (!q.empty()) {
15                 while (!q.empty()) {
16                     if (q.top() == ans) { q.pop(); ans++; }
17                     else {
18                         break;
19                     }
20                 }
21             }
22         }
23         if (q.empty())
24             cout << "1" << endl;
25         else cout << "2" << endl;
26     }
27     return 0;
28 }

 

E - 风王之瞳  Gym - 102174F

如果莫名流泪,也许是失去了什么美好的回忆。

伪装成人类少女夏弥的龙王耶梦加得曾在暗中默默观察了这个名叫楚子航的男孩很多年。后来,她以学妹的身份正面出现在楚子航身边,一边作战,一边还讲着白烂的吐槽。她将利爪刺进他的胸膛,他也将折刀送入她的心口,他们紧紧相拥,像是最亲密的恋人。他最终来到了她生活过的小屋,仰面躺在床上,阳光温软,但眼泪却没有止住。爱唱歌的女孩被埋在花下了,连带着她的野心、和谜一样的往事。终于有一天有人问起他是不是喜欢她,他用一个问题回避了:"你们都叫她小龙女吗?"

题目大意:老龙族了,泪目。求n*m网格里有多少正方形。

思路:可以分类讨论,也可以找规律。这里直接找规律了。

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int t;
 6     cin >> t;
 7     while (t--) {
 8         int n, m,min1;
 9         long long sum = 0;
10         cin >> n >> m;
11         min1 = min(n, m);
12         for (int i = 1; i <= min1; i++)
13             sum += i*(n - i + 1) * (m - i + 1);
14         cout << sum << endl;
15     }
16     return 0;
17 }

 

G - 目标是成为数论大师   Gym - 102174H

题目大意:找出函数 f(x)=√ax+b 的所有不动点,即f(x)=x。

思路:被题目骗了,推了半天公式,结果。结果二分答案都不用暴搜答案就过了啊喂。(当然可以推公式,但我太菜了wa)

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main() {
 4     ios::sync_with_stdio(false);
 5     int t;
 6     cin >> t;
 7     while (t--) {
 8         int a, b,ff=0,dou1=0,dou2=0;
 9         cin >> a >> b;
10         if (a == 0) {
11             ff = 1;
12             dou1 = b;
13         }
14         else if (a < 0) {
15             for (int i = -10000; i <= 10000; i++) {
16                 if (ff == 0&&i==(sqrt(a*i)+b)) {
17                     dou1 = i;
18                     ff++;
19                 }
20                 else if (ff == 1 && i == (sqrt(a * i) + b)) {
21                     dou2 = i;
22                     ff++;
23                 }
24                 if (ff == 2)break;
25             }
26         }
27         else if (a > 0) {
28             for (int i = -10000; i <= 10000; i++) {
29                 if (ff == 0 && i == (sqrt(a * i) + b)) {
30                     dou1 = i;
31                     ff++;
32                 }
33                 else if (ff == 1 && i == (sqrt(a * i) + b)) {
34                     dou2 = i;
35                     ff++;
36                 }
37                 if (ff == 2)break;
38             }
39         }
40         if (ff == 1) {
41             cout << ff << endl;
42             cout << dou1 << endl;
43         }
44         else {
45             cout << ff << endl;
46             cout << dou1 << " " << dou2 << endl;
47         }
48     }
49     return 0;
50 }

 

I - 多项式求导  Gym - 102174K 

题目大意:如题,求N次导后各项系数

思路:模拟求导记录各项项数。

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main() {
 4     int n, k;
 5     long long a[101];
 6     cin >> n >> k;
 7     long long mod = 998244353;
 8     for (int i = 1; i <= n + 1; i++) {
 9         cin >> a[i];
10     }
11     for (int i = 1; i <= n + 1; i++) {
12         for (int j = 1; j <= k; j++) {
13             a[i] = a[i] * (n + 1 - i+1-j) % mod;
14         }
15     }
16     for (int i = 1; i <= k; i++) {
17         if (i != 1)cout << " ";
18         cout << "0";
19     }
20     for (int i = 1; i <= n - k + 1; i++) {
21         cout <<" "<< a[i];
22     }
23     cout << endl;
24     return 0;
25 }

 

标签:10,int,cin,long,++,劳动节,2020,ans,训练赛
来源: https://www.cnblogs.com/Sympa/p/12865329.html