CCF CSP第十一次认证考试 20170917
来源:互联网 发布:万网域名证书查询 编辑:程序博客网 时间:2024/05/23 01:17
第一题: 买酱油,买五瓶送两瓶,买三瓶送一瓶。10元/瓶。给出钱数,问最多能买多少瓶酱油。
第二题:教师取放钥匙,结构体排序,重载运算符。
第三题:文件操作,字符串处理,查询。
第四题:有向图的搜索。能达到点v的点数 + 点v可达到的点数 == 总点数n - 1。询问有多少个这样的点。暴力深搜每个点,记录可达信息
第五题:听说特判1能得八十分。用树状数组+特判1优化就满分了。好像还可以优雅地暴力解题,分块+莫队。但我不会。
第三题把读到的信息去掉所有空格,就是一个串。对于要查询的字符串例如address,变成 键"address": 这样就不会和值中的address重了。只得了60分这题。
第一题:(100)
#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <algorithm>#include <queue>#include <stack>#include <map>#include <set>#include <list>#include <cmath>using namespace std;int main(){//ios::sync_with_stdio(false);int n;while(~scanf("%d", &n)) {n /= 10;int cnt = (n / 5) * 7;n %= 5;cnt += (n / 3) * 4;n %= 3;cnt += n;printf("%d\n", cnt);}return 0;}
第二题:(100)
#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <algorithm>#include <queue>#include <stack>#include <map>#include <set>#include <list>#include <cmath>using namespace std;const int N = 1007;struct Node {int id, t, fg; //t时间点, fg: 0还钥匙,1取钥匙 Node(int id = 0, int t = 0, int fg = 0):id(id), t(t), fg(fg){}bool operator < (const Node &tmp) const {return t == tmp.t ? (fg == tmp.fg ? id < tmp.id : fg < tmp.fg) : t < tmp.t;}}a[N << 1];int v[N];int main(){//ios::sync_with_stdio(false);int n, k;while(~scanf("%d%d", &n, &k)) {int id, st, len, cur = 0;for(int i = 1; i <= k; ++i) {scanf("%d%d%d", &id, &st, &len);a[cur++] = Node(id, st, 1);a[cur++] = Node(id, st + len, 0);}for (int i = 1; i <= n; ++i) v[i] = i;sort(a, a + cur);//for (int i = 0; i < cur; ++i) {//printf("%d %d %d\n", a[i].t, a[i].id, a[i].fg);//}for (int i = 0; i < cur; ++i) {if(a[i].fg == 1) {for (int pos = 1; pos <= n; ++pos) if(v[pos] == a[i].id) { v[pos] = 0; break;}}else {for (int pos = 1; pos <= n; ++pos) if(v[pos] == 0) {v[pos] = a[i].id;break;}}}for(int i = 1; i <= n; ++i) {printf("%d%c", v[i], " \n"[i==n]);}}return 0;}
第三题:(60)
#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <algorithm>#include <queue>#include <stack>#include <map>#include <set>#include <list>#include <cmath>using namespace std;const int N = 107;string dup(string str) {for (string::iterator it = str.begin(); it != str.end(); ++it) {if(*it == ' ') str.erase(it--);}return str;}string add(string str) {string res = "";int len = str.length();for (int i = 0; i < str.length(); ++i) {if(str[i] == '\\' || str[i] == '\"') res += '\\';res += str[i];}return res;}int main(){ios::sync_with_stdio(false);int n, m;while(cin >> n >> m) {string tmp, s = "", t;cin.get();for (int i = 0; i < n; ++i) {getline(cin, tmp); s += tmp;}s = dup(s); //cout << s << endl << s.length() << endl;int len = s.length();while(m-- > 0) {cin >> t; t = add(t);///*t = '\"' + dup(t) + "\":";// cout << t << endl;string res = "";int found = (int) s.find(t), i;if(found == -1) {cout << "NOTEXIST" << endl;}else {found += t.length();//cout << found << " " << s[found] << endl;for (i = found; i < len; ++i) {if(s[i] == '}' && i != len - 1) {found = (int)s.find(t, i);//cout << i << " " << s[i] << endl;if(found == -1) {cout << "NOTEXIST" << endl; }else {found += t.length() + 1;if(s[found] == '{') cout << "OBJECT" << endl;else { cout << "STRING ";while(s[found] != '\"') cout << s[found++];cout << endl;//error}} break;}else if(s[i] == '{'){break;}}if(i >= len || s[i] == '{') {//cout << found << " " << s[found] << endl;if(s[found] == '{') cout << "OBJECT" << endl;else {cout << "STRING ";for(int i= found + 1; i < len; ++i) {if(s[i] == '\\') cout << s[++i];else if(s[i] == '\"') break;else cout << s[i];}cout << endl;}} //else {//cout << i << " " << s[i] << endl;//}}//*/}}return 0;}
第四题:(100)
#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#include <vector>#include <cstring>using namespace std;const int N = 1007;vector<int> e[N]; //动态数组邻接表存图bool mp[N][N]; //mp[i][j] i 到 j是否通 bool vis[N];void dfs(int u, int cur) {vis[u] = 1;mp[u][cur] = mp[cur][u] = 1;for (int i = e[u].size() - 1; i >= 0; --i) {int v = e[u][i];if (!vis[v])dfs(v, cur);}}int main(){int n, m, cnt = 0;scanf("%d%d", &n, &m);for (int i = 0; i<m; ++i) {int u, v;scanf("%d%d", &u, &v);e[u].push_back(v);}for (int i = 1; i <= n; ++i) {memset(vis, 0, sizeof vis);dfs(i, i);}for (int i = 1; i <= n; ++i) {bool fg = true;;for (int j = 1; j <= n; ++j) {if (mp[i][j] == 0) {fg = false;break;}}cnt += fg;}printf("%d", cnt);return 0;}
第五题:
#include <cstdio>#include <cstring>using namespace std;const int N = 1e6 + 7;typedef long long LL;LL bit[N];int n, m, a[N];inline int lowbit(int x) { return x & -x;}void add(int pos, int val) { for (int i = pos; i <= n; i += lowbit(i)) bit[i] += val;}LL sum(int x) { LL res = 0; for (int i = x; i > 0; i -= lowbit(i)) { res += bit[i]; } return res;}int main(){ while(~scanf("%d%d", &n, &m)) { memset(bit, 0, sizeof bit); for (int i = 1; i <= n; ++i) { scanf("%d", a + i); add(i, a[i]); } while(m-- > 0) { int opt, l, r, val; scanf("%d", &opt); if(opt == 1) { scanf("%d%d%d", &l, &r, &val); if(val == 1) continue; //虽有整数都是1的倍数,优化 for(int i = l; i <= r; ++i) if(a[i] >= val && a[i] % val == 0) { add(i,a[i] / val - a[i]); a[i] /= val; } } else if(opt == 2) { scanf("%d%d", &l, &r); printf("%lld\n", sum(r) - sum(l - 1)); } } } return 0;}
阅读全文
2 2
- CCF CSP第十一次认证考试 20170917
- 2016 CCF-CSP 计算机职业资格认证考试 解题报告
- CCF csp第九次认证考试 试题三 权限查询
- ccf csp第九次认证考试 第二题 工资计算
- 历年CCF-CSP认证考试题目解法/思想
- CCF CSP 认证相关
- ccf csp第八次认证
- CCF-CSP认证知识要求
- CCF —— CSP认证
- CCF-CSP认证备考要点
- 第一次CCF CSP认证体验
- CCF CSP认证考试历年真题 数列分段 C语言实现
- CCF CSP认证考试历年真题 日期计算 C语言实现
- CCF CSP认证考试历年真题 模板生成系统 C语言实现
- CCF CSP认证考试历年真题 图像转换 C语言实现
- CCF CSP认证考试历年真题 数字排序 C语言实现
- CCF CSP认证考试历年真题 Z字形扫描 C语言实现
- CCF CSP认证考试历年真题 炉石传说 C语言实现
- ZZTI1000
- 2017青岛赛区亚洲区域赛网络赛 1011题题解
- C++数据类型
- L1-033. 出生年
- C++类的继承与派生
- CCF CSP第十一次认证考试 20170917
- 2017 ACM/ICPC Asia Regional Qingdao Online 1001/HDUOJ 6206 Apple
- (四)数据结构之线性表的简单应用:多项式求和
- 事件分发
- SQL中存储过程和函数的区别
- C++扩展数据类型
- Finally关键字和return的研究
- 题目56-阶乘因式分解(一)
- 使用动画的注意事项