群赛15----2017.9.25
来源:互联网 发布:交互设计师软件 编辑:程序博客网 时间:2024/06/03 13:46
- T1 Fashion in Berland
- 题意
- 解法
- 代码
- 网址这一题
- 小结
- T2 s-palindrome
- 题意
- 解法
- 代码
- 网址这一题
- 小结
- T3 Exponential notation
- 题意
- 解法
- 代码
- 网址这一题
- 小结
- T4 Swaps in Permutation
- 题意
- 解法
- 代码
- 网址这一题
- 小结
- T5 Xor-sequences
- 题意
- 解法
- 代码
- 网址这一题
- 小结
- T6 Couple Cover
- 题意
- 解法
- 代码
- 网址这一题
- 小结
T1 Fashion in Berland
题意:
给你一串数字由0和1组成,要求整个串里必须只有一个0(只有一个数除外).
解法:
暴力.
代码:
#include <bits/stdc++.h>using namespace std;int x[10000];int main(){ int a, bu = 0; cin >> a; for (int i = 1; i <= a; i++) { cin >> x[i]; if (x[i] == 0) bu++; } if ((bu == 1 && a > 1) || (a == 1 && bu == 0)) cout << "YES"; else cout << "NO"; return 0;}
网址:这一题
小结:
**此类题目水题。**
T2 s-palindrome
题意:
给你一个字符串,请问其整个对折可不可以重合?
解法:
暴力.
代码:
#include <bits/stdc++.h>using namespace std;char x[10000];int main(){ int lan = 0; char zz; while (scanf("%c", &zz) == 1 && zz != 10) { lan++; x[lan] = zz; } for (int i = 1; i <= lan / 2; i++) { if (x[i] == 'A' && x[lan - i + 1] == 'A') continue; else if (x[i] == 'b' && x[lan - i + 1] == 'd') continue; else if (x[i] == 'd' && x[lan - i + 1] == 'b') continue; else if (x[i] == 'H' && x[lan - i + 1] == 'H') continue; else if (x[i] == 'I' && x[lan - i + 1] == 'I') continue; else if (x[i] == 'U' && x[lan - i + 1] == 'U') continue; else if (x[i] == 'M' && x[lan - i + 1] == 'M') continue; else if (x[i] == 'o' && x[lan - i + 1] == 'o') continue; else if (x[i] == 'O' && x[lan - i + 1] == 'O') continue; else if (x[i] == 'p' && x[lan - i + 1] == 'q') continue; else if (x[i] == 'q' && x[lan - i + 1] == 'p') continue; else if (x[i] == 'X' && x[lan - i + 1] == 'X') continue; else if (x[i] == 'x' && x[lan - i + 1] == 'x') continue; else if (x[i] == 'Y' && x[lan - i + 1] == 'Y') continue; else if (x[i] == 'T' && x[lan - i + 1] == 'T') continue; else if (x[i] == 'V' && x[lan - i + 1] == 'V') continue; else if (x[i] == 'v' && x[lan - i + 1] == 'v') continue; else if (x[i] == 'W' && x[lan - i + 1] == 'W') continue; else if (x[i] == 'w' && x[lan - i + 1] == 'w') continue; // else if (x[i] == 'm' && x[lan - i + 1] == 'm') // continue; // else if (x[i] == 'n' && x[lan - i + 1] == 'n') // continue; else { cout << "NIE"; return 0; } } //|| x[lan / 2 + 1] == 'n' x[lan / 2 + 1] == 'm' || if (lan % 2 == 1 && x[lan / 2 + 1] == 'A' || x[lan / 2 + 1] == 'H' || x[lan / 2 + 1] == 'I' || x[lan / 2 + 1] == 'M' || x[lan / 2 + 1] == 'O' || x[lan / 2 + 1] == 'o' || x[lan / 2 + 1] == 'T' || x[lan / 2 + 1] == 'U' || x[lan / 2 + 1] == 'V' || x[lan / 2 + 1] == 'v' || x[lan / 2 + 1] == 'W' || x[lan / 2 + 1] == 'w' || x[lan / 2 + 1] == 'x' || x[lan / 2 + 1] == 'X' || x[lan / 2 + 1] == 'Y') cout << "TAK"; else if (lan % 2 == 0) cout << "TAK"; else cout << "NIE"; return 0;}
网址:这一题
小结:
**此类题目暴力。**
T3 Exponential notation
题意:
给你一个数,把他转换成科学计数法.
解法:
暴力。
代码:
#include <bits/stdc++.h>using namespace std;char x[1000000];int main(){ char zz; int lan = 0, flag = -1000, flag2; while (scanf("%c", &zz) == 1 && zz != 10) { lan++; x[lan] = zz; if (x[lan] == '.') flag = lan; } int tou = 1, wei = lan; while (x[tou] == '0' || x[tou] == '.') tou++; while (x[wei] == '0' || x[wei] == '.') wei--; if (flag == -1000) { cout << x[tou]; if (wei - tou > 0) cout << "."; for (int i = tou + 1; i <= wei; i++) cout << x[i]; if (lan - tou > 0) cout << "E" << lan - tou; } else { flag2 = flag - tou; // cout << flag2; cout << x[tou]; if (wei != tou) cout << "."; for (int i = tou + 1; i <= wei; i++) if (x[i] != '.') cout << x[i]; if (flag2 != 1 && flag2 > 0) cout << "E" << flag2 - 1; else if (flag2 != 1) cout << "E" << flag2; } return 0;}
网址:这一题
小结:
**此类题目暴力。**
T4 Swaps in Permutation
题意:
给你一串数字,在给你一些规则,规则是可以将某些位上的数字交换,请输出最大数字串.
解法:
大头堆.
代码:
#include <bits/stdc++.h>using namespace std;#define N 1000020int fa[N], nn, mm;priority_queue<int> p[N];int find(int a){ if (fa[a] == a) return fa[a]; else { fa[a] = find(fa[a]); return fa[a]; }}int main(){ int a, b, flag; cin >> a >> b; for (int i = 1; i <= a; i++) { scanf("%d", &flag); fa[i] = i; p[i].push(flag); } for (int i = 1; i <= b; i++) { scanf("%d%d", &mm, &nn); if (find(mm) == find(nn)) continue; else if (p[find(mm)].size() > p[find(nn)].size()) { while (!p[fa[nn]].empty()) { p[fa[mm]].push(p[fa[nn]].top()); p[fa[nn]].pop(); } fa[fa[nn]] = fa[mm]; } else { while (!p[fa[mm]].empty()) { p[fa[nn]].push(p[fa[mm]].top()); p[fa[mm]].pop(); } fa[fa[mm]] = fa[nn]; } } for (int i = 1; i <= a; i++) { cout << p[find(i)].top() << " "; p[find(i)].pop(); } return 0;}
网址:这一题
小结:
**此类题目较易,就是不好调试。**
T5 Xor-sequences
题意:
给定序列,从序列中选择k(1≤k≤1e18)个数(可以重复选择),使得得到的排列满足xi与xi+1异或的二进制表示中1的个数是3的倍数。问长度为k的满足条件的 序列有多少种?
解法:
矩阵快速幂
代码:
#include <bits/stdc++.h>#include <map>using namespace std;int n, m, que[200010], top, s[2], w, hhh[200010], qqq[200010];map<int, int> mmm;struct point{ int v, id; bool operator<(const point b) const { return v < b.v; }} p[200010];int main(){ scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) scanf("%d", &p[i].v), p[i].id = i, qqq[i] = p[i].v; sort(p, p + 1 + n); hhh[p[1].id] = 1; s[p[1].v & 1]++; mmm[p[1].v] = 1; for (int i = 2; i <= n; i++) if (p[i].v != p[i - 1].v && s[p[i].v & 1] < (n >> 1)) hhh[p[i].id] = 1, s[p[i].v & 1]++, mmm[p[i].v] = 1; s[0] = (n >> 1) - s[0]; s[1] = (n >> 1) - s[1]; int cnt = s[0] + s[1]; for (int i = 1; i <= m && (s[0] || s[1]); i++) if (!mmm[i] && s[i & 1]) que[top++] = i, s[i & 1]--; if (s[0] || s[1]) printf("-1\n"); else { printf("%d\n", cnt); for (int i = 1; i <= n; i++) { if (hhh[i]) printf("%d ", qqq[i]); else printf("%d ", que[--top]); } } return 0;}
网址:这一题
小结:
**此类题目较难。,好题**
T6 Couple Cover
题意:
给一个数列,问这里面有多少对的积大于等于p;
解法:
预处理.
代码:
#include <bits/stdc++.h>using namespace std;#define LL long longconst int N = 3000001;LL x[N], y[N];int main(void){ LL i, j, k, n, m; scanf("%I64d", &n); for (LL i = 1; i <= n; i++) { scanf("%I64d", &k); x[k]++; } for (LL i = 1; i < N; i++) for (LL j = 1; j * i < N; j++) y[i * j] += x[i] * (x[j] - (i == j)); for (LL i = 1; i < N; i++) y[i] += y[i - 1]; scanf("%I64d", &m); while (m--) { scanf("%I64d", &k); printf("%I64d\n", n * (n - 1) - y[k - 1]); } return 0;}
网址:这一题
小结:
**此类题目较难。**
阅读全文
0 0
- 群赛15----2017.9.25
- 群赛11----2017.9.20
- 群赛12----2017.9.24
- 群赛13----2017.9.24
- 群赛14----2017.9.24
- 群赛16----2017.9.26
- 群赛2总结-----2017.9.4
- 群赛4总结----2017.9.6
- 群赛5总结----2017.9.7
- 群赛6总结----2017.9.8
- 群赛7总结----2017.9.9
- 群赛8总结----2017.9.11
- 2017.9.25
- 2017.9.15
- 2017.9.15
- 群赛9总结----2017.9.16(奇怪题目)
- 群赛10总结----2017.9.16(又是奇怪题目)
- 2017.9.25学习笔记
- iOS二维码代码实现
- queyHTML和HTML5的区别?
- 基于deeplab v2的语义分割
- 编写函数,输入一个十六进制数,输出相应的十进制数;
- BZOJ1031: [JSOI2007]字符加密Cipher
- 群赛15----2017.9.25
- 第四周-项目二 建立单链表算法库
- rem自适应布局-移动端自适应必备:flexible.js
- Python 赋值、浅拷贝、深拷贝的区别?
- hdu1081 To The Max(最大子矩阵和)
- 建造者模式
- error:本地函数定义是非法的 此行有一个“{”没有匹配项,在注释中遇到意外的文件结束
- 比较重要的运算符
- 第四周-项目3