CSP-J2020复赛题解
T1:优秀的拆分
首先排除所有奇数,然后考虑如果这个数大于222的kkk次方,那就从 2k22^k\text{~}22k 2 一直减下去,如果出现了000那么就成功,否则失败
#include <bits/stdc++.h>
int s[] = {0,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,1048576*2,1048576*2*2,1048576*2*2*2,1048576*2*2*2*2,1048576*2*2*2*2*2};
int vis[20], mx;
int q;
using namespace std;
int main() {cin >> q;if(q % 2) {cout << -1;return 0;}for(int i = 0; i < sizeof(s)/sizeof(int); i ++) {if(q < s[i]) {mx = i;break;}}for(int i = mx; i > 0 && q; i --) {if(q >= s[i]) {cout << s[i] << ' ';q -= s[i];}}
}
T2:直播领奖
这是一个动态排序问题,首先考虑到sort
的时间复杂度会超限,注意到数据只有600
,那么不妨桶排序,只有 O(600n)O(600n)O(600n) ,比 O(n2logn)O(n^2\log n)O(n2logn)更优秀
#include <bits/stdc++.h>
using namespace std;
int a[605];
int main() {int n, w, t, acc;cin >> n >> w;for(int p = 1;p <= n;p ++){cin >> t;a[t] ++;acc = max(1, p * w / 100);for(int i = 600;i >= 0;i --){acc -= a[i];if(acc <= 0){cout << i << ' ';break;}}}
}
T3:表达式
这个题确实有点难,不妨考虑先用栈把表达式转换为一棵树,再来把每个叶节点的值求出来,如果这个叶节点的值会影响整个树的值,那么把原有的结果取反。
#include <bits/stdc++.h>
using namespace std;
const int N=1000005;
char str[N], ch[N];
int n, x[N], son[N][2], m, book[N], s;
stack<int> q;
int dfs1(int u) {if(u <= n) return x[u];if(ch[u] == '!') return x[u]=!dfs1(son[u][0]);else if(ch[u]=='&') {x[u] = 1;x[u] &= dfs1(son[u][0]);x[u] &= dfs1(son[u][1]);return x[u];} else if(ch[u]=='|') {x[u] = 0;x[u] |= dfs1(son[u][0]);x[u] |= dfs1(son[u][1]);return x[u];}
}void dfs2(int u) {book[u] = 1;if(u > n) {if(ch[u]=='!') dfs2(son[u][0]); else {if(ch[u] == '&') {if(x[son[u][0]]) dfs2(son[u][1]);if(x[son[u][1]]) dfs2(son[u][0]);}if(ch[u] == '|') {if(!x[son[u][0]]) dfs2(son[u][1]);if(!x[son[u][1]]) dfs2(son[u][0]);}}}
}int main() {gets(str);scanf("%d", &n);for(int i=1; i<=n; i++) scanf("%d", &x[i]);int len = strlen(str);m = n;for(int i = 0; i < len; i ++) {if(str[i] == 'x') {i ++;int t = 0;while(str[i] != ' ') {t = t * 10 + str[i] - '0';i++;}q.push(t);} else if(str[i] == '|' || str[i] == '&') {int t1 = q.top();q.pop();int t2 = q.top();q.pop();m ++;son[m][0] = t1;son[m][1] = t2;q.push(m);ch[m] = str[i];} else if(str[i] == '!') {int t = q.top();q.pop();m ++;son[m][0] = t;q.push(m);ch[m] = str[i];}}int root = q.top();int res = dfs1(root);dfs2(root);scanf("%d", &s);for(int i = 1; i <= s; i ++) {int k;cin >> k;if(!book[k]) printf("%d\n",res);else printf("%d\n",res^1);}return 0;
}
T4:方格取数
直接考虑蛇形走法,然后很容易的就能推出式子
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1005;
LL dp[N][N];
int n, m, w[N][N];
int main()
{cin >> n >> m;for(int i = 1;i <= n;i ++){for(int j = 1;j <= m;j ++){cin >> w[i][j];}}memset(dp, -0x3f3f3f3f, sizeof(dp));dp[1][0] = 0;for(int j = 1;j <= m;j ++){LL s = -0x3f3f3f3f;for(int i = 1;i <= n;i ++){s = max(dp[i][j-1], s) + w[i][j];dp[i][j] = max(s, dp[i][j]);}s = -0x3f3f3f3f;for(int i = n;i >= 1;i --){s = max(dp[i][j-1], s) + w[i][j];dp[i][j] = max(s, dp[i][j]);}}cout << dp[n][m];return 0;
}
CSP-J2020复赛题解相关推荐
- 历届CSP真题题解-CSP刷真题之路
历届CSP真题题解-CSP刷真题之路(持续更新中...) 2020-12 2020-09 2020-06 2019-12 2020-12 题目编号 题解链接 CSP202012-1 期末预测之安全指数 ...
- 凡人升天传7——NOIP2010 提高组复赛题解
本蒟蒻在考试时最后一道直接报零*__*,悲痛欲绝,因此在这里著下本题解. 可恶的西西弗 虽然题目做的很垃圾,但在写题解中途不得不感叹除了最后一道,其他真是好水题呀!!! --------------- ...
- 2020 CSP - J初赛 题解
目录 写在前面的话 题面 题解 答案合集 单项选择题 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 阅读程序题 一 16 17 18 19 20 21 二 22 23 24 ...
- 【零一原创】2020 CSP-J 复赛题解 400分攻略
以下给出:2020年csp-j入门级复赛真题,题解,以及程序. 优秀的拆分(power) [题目描述] 般来说,一个正整数可以拆分成若干个正整数的和.例如,1=1,10=1+2+3+4等.对于正整数n ...
- CCF CSP认证考试题解目录
由于本人的书籍<算法详解(C++11 语言描述)>已经出版,为了降低题解的维护难度,有关CCF CSP考试的所有题解的更新将全部在书籍的配套仓库进行,CSDN博客中不再进行任何题解的更新. ...
- CSP 2021 复赛游记
今天虽然没有夏天那么热,但还是缺少了昨天的凉风,让人感觉穿上衣服就热,脱掉衣服就冷.在这天气下,一年一度的 CSP 又开始了. Junior 组 我乘坐着坐过许多次的地铁,走着几年前走过的路,到达了熟 ...
- CSP/NOIP 复赛注意点
打树上倍增时要注意先计算边权,再往上跳. for(int i=17;i>=0;--i)if(dep[f[x][i]]>=dep[y])s+=g[x][i],x=f[x][i];//注意不是 ...
- CCF CSP 历年试题题解
第一题 第二题 第三题 第四题 第五题 第15次(2018.12) 小明上学 小明放学 CIDR合并 数据中心 第14次(2018.09) 卖菜 买菜 元素选择器 再卖菜 第13次(201 ...
- CSP-S2021复赛题解
T1 廊桥分配 题意:给两组线段,分别 m1m1m1 .m2m2m2 个,共计 nnn 条直线,要求每组内线段起点靠前的必须优先放置,同一条直线上的线段互不相交,问如何分配这 nnn 条直线使线段放置 ...
最新文章
- python简单入门_Python简明入门教程
- Avalon-MM 阿窝龙妹妹应用笔记
- 三星s9android recovery,三星S9+刷第三方中文twrp recovery工具和教程
- s5p4418 Android 4.4.2 驱动层 HAL层 服务层 应用层 开发流程记录(三 APP应用)
- 05-02 docker 安装与配置-CentOS
- 指路明灯,99%自动化测试从业者都该看的职业规划
- Centos7搭建虚拟用户FTP
- Java之品优购课程讲义_day06(1)
- 电脑数据丢失,如何才能够快速将被删的数据文件恢复找回?
- 使用VSCode拉取代码报错would clobber existing tag
- mysql frm的意思_mysqlfrm
- linux运维每天都要做什么,Linux运维工作清闲吗?每天需要干什么?
- 在浏览器输入url回车后发生了什么
- 【导数术】6.端点效应
- A Two-step Method for Extrinsic Calibration between a Sparse 3Dand a Thermal Camera 笔记
- BOOST双闭环控制simlulink仿真
- 用HTML写一个汽车租赁系统
- NBA季后赛历史得分榜
- 2017年互联网百强榜单出炉 迅雷连续5年上榜
- 给深度学习研究生的入门建议(未完待续ing)