CQUPT WEEKLY TRAINING (2)DIV2 解题报告
来源:互联网 发布:经传软件账号密码 编辑:程序博客网 时间:2024/05/29 16:12
先推荐一个很好用的网站 http://www.cplusplus.com/
所有C/C++的函数和文档都可以在上面查到。。
A (uva 11988 - Broken Keyboard)
'[' 表示碰到了 "home" ,']' 表示碰到了 "end"。用链表模拟,维护一个指针,当输入是'[' 时,指针移向表头,为 ']' 则移到表尾,否则直接插入。
PS: STL链表
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <vector>#include <queue>#include <stack>#include <cassert>#include <algorithm>#include <cmath>#include <set>#include <list>#include <map>#include <limits>using namespace std;#define MIN(a, b) ((a) < (b) ? (a) : (b))#define MAX(a, b) ((a) > (b) ? (a) : (b))#define REP(i, s, t) for(int (i)=(s);(i)<=(t);++(i))#define UREP(i, s, t) for(int (i)=(s);(i)>=(t);--(i))#define REPOK(i, s, t, o) for(int (i)=(s);(i)<=(t) && (o);++(i))#define MAXN 100000#define MAXM 999999#define MOD 1000000007#define PI 3.1415926535897932384626433832795typedef long long LL;typedef vector<int> veci;char buf[MAXN+5];int main() { //freopen("input.in", "r", stdin); while(scanf("%s",buf) != EOF) { char *p = buf, c; list<char> ans; list<char>::iterator it = ans.begin(); while(*p != '\0') { c = *p; if (c == '[') { it = ans.begin(); } else if (c == ']') { it = ans.end(); } else { ans.insert(it, c); } p++; } for(it = ans.begin();it != ans.end();++it) putchar(*it); putchar('\n'); } return 0;}
B (11136 - Hoax or what)
我们需要一个能够快速插入元素,并且能够快速查询最大,最小值的数据结构。STL 已经为我们实现好了这样的容器,set 和 multiset,不同之处在于 set 里面的元素不可重,而 multiset 可重。set 和 multiset 都是基于 BST(Binary search tree)实现的,以后你可能需要实现自己的 BST 以满足特殊需求。。
PS:STL multiset
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <vector>#include <queue>#include <stack>#include <cassert>#include <algorithm>#include <cmath>#include <set>#include <list>#include <map>#include <limits>using namespace std;#define MIN(a, b) ((a) < (b) ? (a) : (b))#define MAX(a, b) ((a) > (b) ? (a) : (b))#define REP(i, s, t) for(int (i)=(s);(i)<=(t);++(i))#define UREP(i, s, t) for(int (i)=(s);(i)>=(t);--(i))#define REPOK(i, s, t, o) for(int (i)=(s);(i)<=(t) && (o);++(i))#define MAXN 100000#define MAXM 999999#define MOD 1000000007#define PI 3.1415926535897932384626433832795typedef long long LL;typedef vector<int> veci;char buf[MAXN+5];int main() { //freopen("input.in", "r", stdin); int N; while(scanf("%d",&N) == 1 && N) { multiset<int> myset; LL ans = 0; REP(i, 1, N) { int num, t; scanf("%d",&num); REP(j, 1, num) { scanf("%d",&t); myset.insert(t); } int _min = *myset.begin(); int _max = *myset.rbegin(); myset.erase(myset.find(_min)); myset.erase(myset.find(_max)); ans += _max-_min; } printf("%lld\n",ans); } return 0;}
C (ZOJ 1089 Lotto)
因为数据非常小,所以有两种做法:
1)生成组合 (请自行 baidu =_=||)
2)暴力枚举
//生成组合#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <vector>#include <queue>#include <stack>#include <cassert>#include <algorithm>#include <cmath>#include <set>#include <list>#include <map>#include <limits>using namespace std;#define MIN(a, b) ((a) < (b) ? (a) : (b))#define MAX(a, b) ((a) > (b) ? (a) : (b))#define REP(i, s, t) for(int (i)=(s);(i)<=(t);++(i))#define UREP(i, s, t) for(int (i)=(s);(i)>=(t);--(i))#define REPOK(i, s, t, o) for(int (i)=(s);(i)<=(t) && (o);++(i))#define MAXN 100000#define MAXM 999999#define MOD 1000000007#define PI 3.1415926535897932384626433832795typedef long long LL;typedef vector<int> veci;int _map[15];int ans[15];int N;int upper(int x) { return N - (6 - x);}void print() { REP(i, 1, 5) printf("%d ", _map[ans[i]]); printf("%d\n",_map[ans[6]]);}int main() { //freopen("input.in", "r", stdin); int kase = 0; while(scanf("%d",&N) == 1 && N) { if (kase++ > 0) putchar('\n'); REP(i, 1, N) scanf("%d", &_map[i]); REP(i, 1, 6) ans[i] = i; print(); while(true) { int idx = 6; while(idx >= 1 && ans[idx] >= upper(idx)) --idx; if (idx < 1) break; ans[idx]++; REP(i, idx+1, 6) ans[i] = ans[i-1]+1; print(); } } return 0;}
//枚举#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <vector>#include <queue>#include <stack>#include <cassert>#include <algorithm>#include <cmath>#include <set>#include <list>#include <map>#include <limits>using namespace std;#define MIN(a, b) ((a) < (b) ? (a) : (b))#define MAX(a, b) ((a) > (b) ? (a) : (b))#define REP(i, s, t) for(int (i)=(s);(i)<=(t);++(i))#define UREP(i, s, t) for(int (i)=(s);(i)>=(t);--(i))#define REPOK(i, s, t, o) for(int (i)=(s);(i)<=(t) && (o);++(i))#define MAXN 100000#define MAXM 999999#define MOD 1000000007#define PI 3.1415926535897932384626433832795typedef long long LL;typedef vector<int> veci;int _map[15];int ans[15];int N;int upper(int x) { return N - (6 - x);}void print(int a, int b, int c, int d, int e, int f) { printf("%d %d %d %d %d %d\n", _map[a], _map[b], _map[c], _map[d], _map[e], _map[f]);}int main() { //freopen("input.in", "r", stdin); int kase = 0; while(scanf("%d",&N) == 1 && N) { if (kase++ > 0) putchar('\n'); REP(i, 1, N) scanf("%d", &_map[i]); REP(i1, 1, N) REP(i2, i1+1, N) REP(i3, i2+1, N) REP(i4, i3+1, N) REP(i5, i4+1, N) REP(i6, i5+1, N) { print(i1, i2, i3, i4, i5, i6); } } return 0;}
D (Codeforces 272 Div2 A)
从小到大枚举 m, 判断。判断方法可以是:枚举 m 步里面的1,判断余下的能否被2整除。
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <vector>#include <queue>#include <stack>#include <cassert>#include <algorithm>#include <cmath>#include <set>#include <list>#include <map>#include <limits>using namespace std;#define MIN(a, b) ((a) < (b) ? (a) : (b))#define MAX(a, b) ((a) > (b) ? (a) : (b))#define REP(i, s, t) for(int (i)=(s);(i)<=(t);++(i))#define UREP(i, s, t) for(int (i)=(s);(i)>=(t);--(i))#define REPOK(i, s, t, o) for(int (i)=(s);(i)<=(t) && (o);++(i))#define MAXN 100000#define MAXM 10000#define MOD 1000000007#define PI 3.1415926535897932384626433832795typedef long long LL;typedef vector<int> veci;typedef vector<pair<int, int> > vect;typedef pair<int, int> pairi;const double maxdouble = numeric_limits<double>::max();const double eps = 1e-10;const int INF = 0x7FFFFFFF;int main() { int n, m; cin >> n >> m; bool ok = false; int ans; for (int i=1;m*i<=n && !ok;++i) { int num = m*i; for (int j=0;j<=num && !ok;++j) if (j+2*(num-j) == n) { ok = true; ans = num; break; } } if (!ok) cout << -1; else cout << ans; return 0;}
E (Codeforces 269 Div2 A)
分情况判断下。。
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <vector>#include <queue>#include <stack>#include <cassert>#include <algorithm>#include <cmath>#include <set>#include <limits>using namespace std;#define MIN(a, b) ((a) < (b) ? (a) : (b))#define MAX(a, b) ((a) > (b) ? (a) : (b))#define F(i, n) for(int (i)=0;(i)<(n);++(i))#define REP(i, s, t) for(int (i)=(s);(i)<=(t);++(i))#define UREP(i, s, t) for(int (i)=(s);(i)>=(t);--(i))#define REPOK(i, s, t, o) for(int (i)=(s);(i)<=(t) && (o);++(i))#define MAXN 100000#define MAXM 10000#define MOD 10000007#define PI 3.1415926535897932384626433832795typedef long long LL;const double maxdouble = numeric_limits<double>::max();const double eps = 1e-10;const int INF = 0x7FFFFFFF;int cnt[10];vector<int> buf;int main() { //freopen("input.in", "r", stdin); int tmp; REP(i, 0, 5) { cin >> tmp; cnt[tmp]++; } bool ok = false; REP(i, 0, 9) if (cnt[i] > 0) { if (cnt[i] >= 4) { cnt[i] -= 4; ok = true; } if (cnt[i] > 0) { REP(j, 0, cnt[i]-1) buf.push_back(i); } } if (!ok) cout << "Alien\n"; else { //cout << buf.size() << " " << buf[0] << " " << buf[1] << endl; if (buf[0] != buf[1]) cout << "Bear\n"; else cout << "Elephant\n"; } return 0;
F (Codeforces 269 Div2 B)
找连续相等的部分。。然后。。这种和谐的数据,随便搞吧 = =||
因为是 DIV2 ,还是给出我丑陋的代码。。附加一份比较好的代码,对比看看吧~~
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <vector>#include <queue>#include <stack>#include <cassert>#include <algorithm>#include <cmath>#include <set>#include <limits>using namespace std;#define MIN(a, b) ((a) < (b) ? (a) : (b))#define MAX(a, b) ((a) > (b) ? (a) : (b))#define F(i, n) for(int (i)=0;(i)<(n);++(i))#define REP(i, s, t) for(int (i)=(s);(i)<=(t);++(i))#define UREP(i, s, t) for(int (i)=(s);(i)>=(t);--(i))#define REPOK(i, s, t, o) for(int (i)=(s);(i)<=(t) && (o);++(i))#define MAXN 100000#define MAXM 10000#define MOD 10000007#define PI 3.1415926535897932384626433832795typedef long long LL;const double maxdouble = numeric_limits<double>::max();const double eps = 1e-10;const int INF = 0x7FFFFFFF;int cnt[10];vector<int> buf;int main() { //freopen("input.in", "r", stdin); int tmp; REP(i, 0, 5) { cin >> tmp; cnt[tmp]++; } bool ok = false; REP(i, 0, 9) if (cnt[i] > 0) { if (cnt[i] >= 4) { cnt[i] -= 4; ok = true; } if (cnt[i] > 0) { REP(j, 0, cnt[i]-1) buf.push_back(i); } } if (!ok) cout << "Alien\n"; else { //cout << buf.size() << " " << buf[0] << " " << buf[1] << endl; if (buf[0] != buf[1]) cout << "Bear\n"; else cout << "Elephant\n"; } return 0;}牛犇的代码:
#include <iostream>#include <cstdio>#include <vector>#include <cmath>#include <algorithm>#include <iomanip>#include <string>#include <set>#include <stack>#define mp(x, y) make_pair(x, y)#define all(x) x.begin(), x.end()#define eps 1e-6using namespace std;int main(){ //freopen("input.txt", "r", stdin); int n; cin >> n; vector<pair<int, int> > g(n), k(n), l(n); for (int i = 0; i < n; ++i) { cin >> g[i].first; g[i].second = i + 1; } sort(all(g)); k = g; l = g; bool kk = false; for (int i = 0; i < n - 1; ++i) { if (g[i].first == g[i + 1].first && !kk) { kk = true; swap(k[i], k[i + 1]); continue; } if (g[i].first == g[i + 1].first && kk) { swap(l[i], l[i + 1]); cout << "YES" << endl; for (int w = 0; w < n; ++w) cout << g[w].second << " "; cout << endl; for (int w = 0; w < n; ++w) cout << k[w].second << " "; cout << endl; for (int w = 0; w < n; ++w) cout << l[w].second << " "; cout << endl; return 0; } } cout << "NO" << endl; return 0;}By slowlight93
0 0
- CQUPT WEEKLY TRAINING (2)DIV2 解题报告
- CQUPT WEEKLY TRAINING (4)DIV2 解题报告
- CQUPT WEEKLY TRAINING (5)DIV2 解题报告
- CQUPT WEEKLY TRAINING (6)DIV2 解题报告
- CQUPT WEEKLY TRAINING (7)DIV2 解题报告
- CQUPT WEEKLY TRAINING (1)解题报告
- CQUPT WEEKLY TRAINING (3)解题报告
- Mango Weekly Training Round #3 解题报告
- Mango Weekly Training Round #6 解题报告
- 2015 CQUPT WEEKLY TRAINING (1)题解和专题内容推荐
- LeetCode Weekly Contest 56 解题报告
- codeforces #133 div2 解题报告
- codeforces #134 div2 解题报告
- SRM 556 DIV2 解题报告
- codeforce 192 div2解题报告
- 130720CF div2解题报告
- [Codeforces]Round246 div2 解题报告
- codeforces#254DIV2解题报告
- 在centos6.5下安装vmware tools
- 开门人和关门人(杭电1234)
- [WebGL入门]二十七,多纹理
- Keil定义字符串数组到ROM中
- 随便写写
- CQUPT WEEKLY TRAINING (2)DIV2 解题报告
- java集合框架
- 【android】GridView如何适配不同屏幕
- 第一篇:iOS的书籍和一些大神的blog链接(持续更新)
- HDU-1237-简单计算器
- 面试题积累(一)
- php中成功打开pgsql扩展(windows下)
- NYOJ6174问题
- 【JUnit4.10源代码分析】0导航