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(n2log⁡n)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复赛题解相关推荐

  1. 历届CSP真题题解-CSP刷真题之路

    历届CSP真题题解-CSP刷真题之路(持续更新中...) 2020-12 2020-09 2020-06 2019-12 2020-12 题目编号 题解链接 CSP202012-1 期末预测之安全指数 ...

  2. 凡人升天传7——NOIP2010 提高组复赛题解

    本蒟蒻在考试时最后一道直接报零*__*,悲痛欲绝,因此在这里著下本题解. 可恶的西西弗 虽然题目做的很垃圾,但在写题解中途不得不感叹除了最后一道,其他真是好水题呀!!! --------------- ...

  3. 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 ...

  4. 【零一原创】2020 CSP-J 复赛题解 400分攻略

    以下给出:2020年csp-j入门级复赛真题,题解,以及程序. 优秀的拆分(power) [题目描述] 般来说,一个正整数可以拆分成若干个正整数的和.例如,1=1,10=1+2+3+4等.对于正整数n ...

  5. CCF CSP认证考试题解目录

    由于本人的书籍<算法详解(C++11 语言描述)>已经出版,为了降低题解的维护难度,有关CCF CSP考试的所有题解的更新将全部在书籍的配套仓库进行,CSDN博客中不再进行任何题解的更新. ...

  6. CSP 2021 复赛游记

    今天虽然没有夏天那么热,但还是缺少了昨天的凉风,让人感觉穿上衣服就热,脱掉衣服就冷.在这天气下,一年一度的 CSP 又开始了. Junior 组 我乘坐着坐过许多次的地铁,走着几年前走过的路,到达了熟 ...

  7. CSP/NOIP 复赛注意点

    打树上倍增时要注意先计算边权,再往上跳. for(int i=17;i>=0;--i)if(dep[f[x][i]]>=dep[y])s+=g[x][i],x=f[x][i];//注意不是 ...

  8. CCF CSP 历年试题题解

      第一题 第二题 第三题 第四题 第五题 第15次(2018.12) 小明上学 小明放学 CIDR合并 数据中心   第14次(2018.09) 卖菜 买菜 元素选择器 再卖菜   第13次(201 ...

  9. CSP-S2021复赛题解

    T1 廊桥分配 题意:给两组线段,分别 m1m1m1 .m2m2m2 个,共计 nnn 条直线,要求每组内线段起点靠前的必须优先放置,同一条直线上的线段互不相交,问如何分配这 nnn 条直线使线段放置 ...

最新文章

  1. python简单入门_Python简明入门教程
  2. Avalon-MM 阿窝龙妹妹应用笔记
  3. 三星s9android recovery,三星S9+刷第三方中文twrp recovery工具和教程
  4. s5p4418 Android 4.4.2 驱动层 HAL层 服务层 应用层 开发流程记录(三 APP应用)
  5. 05-02 docker 安装与配置-CentOS
  6. 指路明灯,99%自动化测试从业者都该看的职业规划
  7. Centos7搭建虚拟用户FTP
  8. Java之品优购课程讲义_day06(1)
  9. 电脑数据丢失,如何才能够快速将被删的数据文件恢复找回?
  10. 使用VSCode拉取代码报错would clobber existing tag
  11. mysql frm的意思_mysqlfrm
  12. linux运维每天都要做什么,Linux运维工作清闲吗?每天需要干什么?
  13. 在浏览器输入url回车后发生了什么
  14. 【导数术】6.端点效应
  15. A Two-step Method for Extrinsic Calibration between a Sparse 3Dand a Thermal Camera 笔记
  16. BOOST双闭环控制simlulink仿真
  17. 用HTML写一个汽车租赁系统
  18. NBA季后赛历史得分榜
  19. 2017年互联网百强榜单出炉 迅雷连续5年上榜
  20. 给深度学习研究生的入门建议(未完待续ing)

热门文章

  1. python设置清华源镜像
  2. 手算前推回代求解潮流电压分布
  3. 关于mysql答辩的问题_答辩常见问题总结.doc
  4. AUTOSAR MCAL解析: ADC
  5. web 服务器安全维护,Web服务器安全攻击及防护机制详解
  6. qt qml 界面程序 适配4K屏幕 简单方法
  7. ASP.NET Core 2.0 : 八.图说管道,唐僧扫塔的故事
  8. 用python,重温小时候猜数字大小游戏
  9. Unity UI 框架
  10. 第一章 ContextCapture 19 基础操作