牛客练习赛22 ABC

A 有趣的题

 

模拟题

 1 #include <bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 const int N = 1e5+10;
 5 int a[10],x;
 6 int main() {
 7     for(int i = 0; i < 6; i ++) {
 8         cin >> x;
 9         a[x]++;
10     }
11     sort(a,a+10);
12     if(a[9] >= 4) {
13         a[9] -= 4;
14         sort(a,a+10);
15         if(a[9] == 2) printf("Elephant\n");
16         else if(a[9] == 1 && a[8] == 1) printf("Bear\n");
17     } else printf("Hernia\n");
18     return 0;
19 }

B 送分题

真的是送分题

 1 #include <bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 const int N = 1e5+10;
 5 
 6 int main() {
 7     int a, b, c;
 8     cin >> a >> b >> c;
 9     int MAX = 0;
10     MAX = max(a+b*c,max(a*(b+c),max(a*b*c,max((a+b)*c,a+b+c))));
11     cout << MAX<< endl;
12     return 0;
13 }

C 简单瞎搞题

一共有 n个数,第 i 个数是 xi  可以取 [li , ri] 中任意的一个值。设 ,求 S 种类数。

输入描述:

第一行一个数 n。 然后 n 行,每行两个数表示 l

i

,r

i

。 

输出描述:

输出一行一个数表示答案。

示例1

输入

复制
5
1 2
2 3
3 4
4 5
5 6

输出

复制
26

备注:

1 ≤ n , l

i

 , r

i

 ≤ 100

总共不会超过一百万种情况,所有可以用bitset来算,开1e6大小的bitset,第i为可以表示数字i-1, 每输入一个范围,然后在前面的基础上计算现在有多少个。那就让前面的都加上[l,r]这个范围后会变成多少,相当于向左移动j*j。
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N = 1e6+10;
 4 bitset<N> a, b;
 5 
 6 int main() {
 7     int n, l, r;
 8     cin >> n;
 9     b[0] = 1;
10     for(int i = 0; i < n; i ++) {
11         cin >> l >> r;
12         for(int j = l; j <= r; j ++) {
13             a |= (b<<(j*j));
14         }
15         b = a;
16         a.reset();
17     }
18     cout << b.count() << endl;
19     return 0;
20 }

 

 
posted @ 2018-07-14 10:10  starry_sky  阅读(311)  评论(0编辑  收藏  举报