Codeforces Round #316 (Div. 2)
2015-08-22 20:02
375 查看
A. Elections
1.对每个人的票数进行统计
2.票数最大的人的序号即为答案
B. Simple Game
根据獲勝條件編碼
C. Replacement
1.统计相邻字符是’.’的个数,在不查询的情况下, 个数即为所求的答案
2.每次查询都会更改相邻字符是’.’的個數,減掉減少的個數即可
D. Tree Requests
第一次使用这么强大的stl,stl学习链接
1.对每个人的票数进行统计
2.票数最大的人的序号即为答案
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <vector> #include <cmath> #include <algorithm> #include <set> #include <map> #include <queue> #include <ctime> #include<assert.h> #define pb push_back #define ll long long #define mp make_pair #define f first #define s second #define pii pair < int, int > #define ull unsigned long long #define pll pair < ll, ll > #define forit(s) for(__typeof(s.begin()) it = s.begin(); it != s.end(); it ++) #define all(s) s.begin(), s.end() const int inf = (1ll << 31) - 1; const int maxn = (int) 1e5 + 10; #define max(a, b) ((a) > (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b)) using namespace std; int n = 0, m = 0, vote[110][110]; int main() { //freopen("data_A.txt", "r", stdin); int ans = 0; while(scanf("%d%d", &n, &m) != EOF) { for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { scanf("%d", &vote[i][j]); } } int candian[110], candiai[110]; int recind = 0; for (int i = 1; i <= m; i++) { int maxn = -inf; for (int j = 1; j <= n; j++) { if (maxn < vote[i][j]) { maxn = vote[i][j]; recind = j; } } for (int j = 1; j <= n; j++) { if (vote[i][j] == maxn) { if (j < recind) { recind = j; } } } candiai[i] = recind; } int rec[110]; int maxi = 0; int maxn = 0; for (int i = 1; i <= n; i++) { int addn = 0; for (int j = 1; j <= m; j++) { if (candiai[j] == i) { addn++; } } rec[i] = addn; } for (int i = 1; i <= n; i++) { if (maxn < rec[i]) { maxn = rec[i]; maxi = i; } } for (int i = 1; i <= n; i++) { assert(!i); if (maxn == rec[i]) { if (i < maxi) { maxi = i; } } } printf("%d\n", maxi); } return 0; }
B. Simple Game
根据獲勝條件編碼
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <vector> #include <cmath> #include <algorithm> #include <set> #include <map> #include <queue> #include <ctime> #define pb push_back #define ll long long #define mp make_pair #define f first #define s second #define pii pair < int, int > #define ull unsigned long long #define pll pair < ll, ll > #define forit(s) for(__typeof(s.begin()) it = s.begin(); it != s.end(); it ++) #define all(s) s.begin(), s.end() const int inf = (1ll << 31) - 1; const int maxn = (int) 1e5 + 10; #define max(a, b) ((a) > (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b)) using namespace std; int n = 0, m = 0; int main() { //freopen("data_B.txt", "r", stdin); int ans = 0; while(scanf("%d%d", &n, &m) != EOF) { if (n == 1) { printf("1\n"); }else { if (n - m > m - 1) { printf("%d\n", m + 1); }else { printf("%d\n", m - 1); } } } return 0; }
C. Replacement
1.统计相邻字符是’.’的个数,在不查询的情况下, 个数即为所求的答案
2.每次查询都会更改相邻字符是’.’的個數,減掉減少的個數即可
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <vector> #include <cmath> #include <algorithm> #include <set> #include <map> #include <queue> #include <ctime> #define pb push_back #define ll long long #define mp make_pair #define f first #define s second #define pii pair < int, int > #define ull unsigned long long #define pll pair < ll, ll > #define forit(s) for(__typeof(s.begin()) it = s.begin(); it != s.end(); it ++) #define all(s) s.begin(), s.end() const int inf = (1ll << 31) - 1; const int maxn = (int) 1e5 + 10; #define max(a, b) ((a) > (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b)) using namespace std; char s[301000]; int ans = 0, addn = 0; int n = 0, m = 0; int used[301000]; int main() { //freopen("data_C.txt", "r", stdin); while(scanf("%d%d", &n, &m) != EOF) { memset(used, 0, sizeof(used)); ans = 0; addn = 0; scanf("%s", s); for (int i = 0; i < n; i++) { if (s[i] == '.') { ans++; if (i == 0 || s[i - 1] != '.') { addn++; } used[i + 1] = 1; } } for (int i = 0; i < m; i++) { int a = 0; char b; scanf("%d %c", &a, &b); int f = 0; if (b == '.') { f = 1; }else { f = 0; } if (f != used[a]) { if (used[a]) { ans--; }else { ans++; } if (used[a - 1] && used[a + 1] && !f) { addn++; } if (used[a - 1] && used[a + 1] && f) { addn--; } if (!used[a - 1] && !used[a + 1] && !f) { addn--; } if (!used[a - 1] && !used[a + 1] && f) { addn++; } } used[a] = f; printf("%d\n", ans - addn); } } return 0; }
D. Tree Requests
第一次使用这么强大的stl,stl学习链接
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <vector> #include <cmath> #include <algorithm> #include <set> #include <map> #include <queue> #include <ctime> #define pb push_back #define ll long long #define mp make_pair #define f first #define s second #define pii pair < int, int > #define ull unsigned long long #define pll pair < ll, ll > #define forit(s) for(__typeof(s.begin()) it = s.begin(); it != s.end(); it ++) #define all(s) s.begin(), s.end() #define mk make_pair const int inf = (1ll << 31) - 1; const int maxn = (int) 1e5 + 10; const ll dd = 2e6 + 7; #define max(a, b) ((a) > (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b)) using namespace std; vector<int> P[dd]; vector<pair<int, int> >H[dd]; int in[dd], out[dd]; int A[31]; int ti = 0; string s; int n = 0, m = 0; void dfs(int v, int h) { in[v] = ++ti; H[h].push_back(mk(ti, H[h].back().second ^ A[s[v] - 'a'])); for (int i = 0; i < P[v].size(); i++) { dfs(P[v][i], h + 1); } out[v] = ++ti; } int main() { //freopen("data_D.txt", "r", stdin); while(scanf("%d%d", &n, &m) != EOF) { for (int i = 0; i < n; i++) { H[i].resize(1); } for (int i = 0; i < 30; i++) { A[i] = 1 << i; } for (int i = 0; i < n - 1; i++) { int t = 0; scanf("%d", &t); P[t - 1].push_back(i + 1); } cin>>s; dfs(0, 0); for (int i = 0; i < m; i++) { int h = 0, v = 0; scanf("%d%d", &v, &h); v--; h--; int l = lower_bound(H[h].begin(), H[h].end(), mk(in[v], -1)) - H[h].begin() - 1; int r = lower_bound(H[h].begin(), H[h].end(), mk(out[v], -1)) - H[h].begin() - 1; int t = H[h][l].second ^ H[h][r].second; bool ok = t - (t & -t); if (!ok) { printf("Yes\n"); }else { printf("No\n"); } } } return 0; }
相关文章推荐
- ThreadLocal原理与用法
- 快速排序partition过程常见的两种写法+快速排序非递归实现
- 迷之博弈 SDUT 3038
- Valid Anagram
- github
- javascript之函数表达
- java8 Stream
- Objective_C内存管理_note
- 习惯性的对自己没信心,其实没想到自己已经变强大了。
- SpringMVC环境搭建
- Linux权限引发的"血案"
- OC学习笔记总结(Block语法开始)
- bootstrap 学习(1)
- 给定有序数组,创建高度最小的二叉查找树
- PS的自由变换Ctrl+T
- Asp.net mvc5 解析route源码实现自己的route系统
- 华为OJ(计算字符串的距离)
- Java- 构造方法的执行顺序
- HN OJ 13375 Flowery Trails (spfa的路径遍历)
- USBDM RS08/HCS08/HCS12/Coldfire V1,2,3,4/DSC/Kinetis Debugger and Programmer -- BDM Construction and Firmware