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. activiti节点跳转
  2. android wear升级方法,LG G Watch官方工具包刷Android wear5.1.1教程(附刷机包)
  3. 程序员新动向!大龄困惑详解!
  4. 我从 Vuejs 中学到了什么——框架设计学问
  5. 【数据库原理及应用】经典题库附答案(14章全)——第三章:结构化查询语言SQL
  6. TCP 客户端和服务器端
  7. 网易资深Java架构师:疫情对java行业的影响分析
  8. 边缘深度学习设备基准评测:英伟达Jetson Nano胜出
  9. 5G 会榨干手机的电池?
  10. Eclpise 和 MyEclipse 的区别
  11. 知乎;如何帮助前端新人入门和提高?
  12. ASP.NET C# 文件下载速度限制
  13. 交易撮合引擎原理与实现【含源码】
  14. 宏正ATEN推出ALTUSEN系列 全面冲刺KVM高端市场
  15. c语言屏蔽一段程序,C语言#if 0阻止代码段
  16. LeetCode探索之旅(17)-69求根号
  17. 华为android贡献度,从EMUI的6次里程碑事件,看华为对安卓生态的贡献
  18. 20P42 500个LUTs创意旅行VLOG时尚婚礼人物环境复古特殊INS电影调色预设+25个复古老电影VHS特效
  19. ktt算法 约化_svm算法 最通俗易懂讲解
  20. web打印页眉页脚_Web设计中页眉和页脚的20种创意组合

热门文章

  1. MCAL中ADC的配置
  2. java聊天室报告ppt_基于JavaWeb聊天室设计与实现毕业论文+任务书+中期表+中期报告+项目源码+数据库+答辩PPT...
  3. android 仿微信账单生成器手机版式,至尊版清理大师app
  4. 牛逼!手把手教你制作个人微信红包封面,保姆级红包封面制作教程
  5. 细说Java性能测试第三课 性能测试详解2
  6. 联想潮5000 BIOS 解锁 CFG Lock
  7. Cesium开发基础篇 | 04空间数据可视化之Entity
  8. 汽车CAN通信基础知识-Java之Socket通信实战
  9. 写给小白的云计算入门科普
  10. Spring Cloud踩坑指南