牛客练习赛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 个数是 x i  可以取 [l i , r i] 中任意的一个值。设 ,求 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 }

 

 

转载于:https://www.cnblogs.com/xingkongyihao/p/9308663.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值