牛客练习赛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 ≤ 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 }