Codeforces Round #410 (Div. 2)
2017-04-22 11:54
267 查看
Codeforces Round #410 (Div. 2)
A B略..A没判本来就是回文WA了一次ggC.Mike and gcd problem
题意:一个序列每次可以把\(a_i, a_{i+1}\)换成\(a_i-a_{i+1},a_i+a_{i+1}\),最小次数使gcd不为1题解:
玩一下发现:
奇数 奇数 \(\rightarrow\) 偶数 偶数
奇数 偶数 $ \rightarrow$ 奇数 奇数 \(\rightarrow\) 偶数 偶数
最后都变成偶数好像就是最优啊,贪心变就行了
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; typedef long long ll; const int N=1e5+5; inline int read(){ char c=getchar(); int x=0,f=1; while(c<'0'||c>'9') {if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();} return x*f; } int n, a , d; int gcd(int a, int b) {return b == 0 ? a : gcd(b, a%b);} int main() { // freopen("in", "r", stdin); n=read(); d = a[1] = read(); for(int i=2; i<=n; i++) a[i] = read(), d = gcd(d, a[i]); if(d > 1) {puts("YES\n0"); return 0;} for(int i=1; i<=n; i++) a[i] = a[i] & 1; int ans = 0; for(int i=1; i<=n; i++) if(a[i]) { if(a[i+1]) ans++, a[i] = a[i+1] = 0; else ans += 2, a[i] = 0; } printf("YES\n%d", ans); }
D.Mike and distribution
题意:选\(\lfloor \frac{n}{2} \rfloor+1\)个数满足\(2*S_a > sum_a\)和\(2*S_b>sum_b\)题解:
竟然没想出贪心。注意两点
b每相邻两个数选较大值,最后一定>一半
选\(\lfloor \frac{n}{2} \rfloor+1\)个数,a排序后即使每相邻两个数选了较小值,再选一个最大的a根据坐标轴投影证明也可以>一半
比赛时想过随机但是没写,没想到真的能过,很难构造唯一解
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; typedef long long ll; const int N = 1e5+5; inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f; } int n, c ; struct meow{ int a, b, id; operator < (const meow &r) const {return a > r.a;} } a ; int main() { //freopen("in", "r", stdin); n=read(); for(int i=1; i<=n; i++) a[i].a = read(); for(int i=1; i<=n; i++) a[i].b = read(), a[i].id = i; sort(a+1, a+1+n); printf("%d\n", n/2+1); for(int i=1+(n&1); i<n; i+=2) { if(a[i].b > a[i+1].b) c[a[i].id] = 1; else c[a[i+1].id] = 1; } if(n&1) c[a[1].id] = 1; else c[a[1].id] = c[a[2].id] = 1; for(int i=1; i<=n; i++) if(c[i]) printf("%d ", i); }
相关文章推荐
- Codeforces Round #410 (Div. 2)D题
- Codeforces Round #410 (Div. 2) D. Mike and distribution(贪心)
- Codeforces Round #410 (Div. 2)
- Codeforces Round #410 (Div. 2) A
- Codeforces Round #410 Div2 D Mike and distribution
- Codeforces Round #410 (Div. 2)C题
- Codeforces Round #410 (Div. 2)B. Mike and strings(暴力)
- Codeforces Round #410 (Div. 2) Mike and gcd problem 思维
- Codeforces Round #410 (Div. 2)
- Mike and gcd problem Codeforces Round #410 (Div. 2)
- 【Codeforces AIM Tech Round 4 (Div. 2) C】
- CF Codeforces Round #257 (Div. 1) A (449A) Jzzhu and Chocolate
- Codeforces Round #325 (Div. 2) D bfs
- Codeforces Round #297 (Div. 2) 525C Ilya and Sticks(脑洞)
- Codeforces Round #257 (Div. 2) B Jzzhu and Sequences
- Codeforces Round #299 (Div. 2)【A,B,C】
- Codeforces Round #447 (Div. 2) D. Ralph And His Tour in Binary Country(dfs)
- Codeforces Round #305 (Div. 2)D---Mike and Feet(单调栈)
- Codeforces Round #380 (Div. 2) B. Spotlights (模拟)
- Codeforces Round #394 (Div. 2) E. Dasha and Puzzle(分形)