Codeforces 1176B - Merge it!

题目链接:http://codeforces.com/problemset/problem/1176/B



题意:给定序列,任意俩个元素可以相加成一个元素,求序列元素能被3整除的最大数量。

思路: 对于所有元素进行 模3 的预处理,然后 看代码吧

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int t;
 6     int a[105];
 7     cin >> t;
 8     while(t--)
 9     {
10         int n;
11         cin >> n;
12         int ans = 0;
13         int a1 = 0,a2 = 0;
14         for(int i = 0;i < n;i++)
15         {
16             cin >> a[i];
17             a[i] %= 3;
18             if(a[i] == 0) ans++;
19             else if(a[i] == 1) a1++;
20             else if(a[i] == 2) a2++;
21         }
22         if(a1 == a2) cout << ans + a1 << endl;
23         else
24         {
25             int m = min(a1,a2);
26             ans += m +(a1+a2-2*m)/3;
27             cout << ans << endl;
28         }
29     }
30     return 0;
31 }

原文地址:https://www.cnblogs.com/Carered/p/11020417.html

时间: 2024-10-21 12:35:05

Codeforces 1176B - Merge it!的相关文章

Codeforces 962D - Merge Equals

链接: http://codeforces.com/problemset/problem/962/D 题意: 给出一个整数序列.选择其中最小且出现两次(或以上)的数,把最左边的两个从序列中移除,然后把它们的和放到它们的后面第一位.不断重复上述过程,直到序列中的每个数都是唯一的.输出最后的序列. 分析: 如果在数a的前面有一个可以跟a合并的数b,则b一定是唯一的.否则,b要先跟其他等值的数合并.这样,我们只需要从左到右依次加入每个数,不断维护当前序列的唯一性即可.方法是用map记录前面每个数值的唯

Codeforces 847B - Preparing for Merge Sort

847B - Preparing for Merge Sort 思路:前面的排序的最后一个一定大于后面的排序的最后一个.所以判断要不要开始新的排序只要拿当前值和上一个排序最后一个比较就可以了. 代码: #include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define mem(a,b) memset(a,b,sizeof(a)) const int N=2e5+5; int

Educational Codeforces Round 42 (Rated for Div. 2) D - Merge Equals

这道题我可以直接模拟 理由是一个数*2的过程中最多30次左右 2^31 = 2e9 所以我可以从小的书开始模拟这个过程 #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <map> #include <vector> #include <set> typedef long long ll; const

Educational Codeforces Round 42 D. Merge Equals (set + pll)

CF962D 题意: 给定一个数列,对于靠近左端的两个相同大小的值x可以合并成一个点.把x 乘以2 放在第二个点的位置,问最后的数列大小和每个位子的值. 思路: 利用set 配上 pair 就行了,感觉很巧妙,每次取出前两个pll  t1,t2. 如果 t1.first != t2.first ,把t2直接重新放入set中,否则,把t2.first * 2并更新t2.second 位子,把t2放入到set中.(这么说好像优先队列也可以) #include <iostream> #include

CodeForces 433C Ryouko&#39;s Memory Note-暴力

Ryouko's Memory Note Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice CodeForces 433C Description Ryouko is an extremely forgetful girl, she could even forget something that has just happened. So in

Codeforces 755C:PolandBall and Forest(并查集)

http://codeforces.com/problemset/problem/755/C 题意:该图是类似于树,给出n个点,接下来p[i]表示在树上离 i 距离最远的 id 是p[i],如果距离相等则p[i]是 id 较小的点. 思路:一开始没什么想法,画几分钟图发现不到什么东西,后来想着 i 和 p[i] 有关系,那么就代表 i 和 p[i] 是属于同一棵树,那么不就是并查集了嘛.抱着试一试的心态搞了一下居然过了. 1 #include <cstdio> 2 #include <c

Codeforces 722C Destroying Array(并查集)*

题目链接:http://codeforces.com/problemset/problem/722/C 题意: 有 n 个正整数序列.同时 n 个摧毁序列,从 1 到 n每次把正整数序列里对应下标的数字去掉,成为一个间隔. 问每去掉一个数字,序列中最大的连续子段和. 思路: 倒着想,这道题就变成了:从 n 到 1每次出现一个数字,若数字的两边已经存在集合,则把存在的集合合并为一个, 并更新集合的和,否则单独为一个集合.过程中始终维护序列中目前所有集合里和的最大值. 代码: #include <i

Codeforces Round #250 (Div. 2) (ABCD题解)

比赛链接:http://codeforces.com/contest/433 A. Kitahara Haruki's Gift time limit per test:1 second memory limit per test:256 megabytes Kitahara Haruki has bought n apples for Touma Kazusa and Ogiso Setsuna. Now he wants to divide all the apples between th

Codeforces Round #254 (Div. 2) B. DZY Loves Chemistry (并查集)

题目链接 昨天晚上没有做出来,刚看题目的时候还把题意理解错了,当时想着以什么样的顺序倒,想着就饶进去了, 也被题目下面的示例分析给误导了. 题意: 有1-n种化学药剂  总共有m对试剂能反应,按不同的次序将1-n种试剂滴入试管,如果正在滴入的试剂能与已经滴入 的试剂反应,那么危险数*2,否则维持不变.问最后最大的危险系数是多少. 分析:其实这个题根本不用考虑倒入的顺序,只是分块就行,结果就是每个子集里元素的个数-1 和  的2的幂. 1 #include <iostream> 2 #inclu