写这个题写了1h,赛后无意看见jly神的代码只能膜拜%%%

C. Bouncing Ball

预处理从1→k1\to k1→k开始跳需要添加多少个平台,预处从k+1→nk+1\to nk+1→n这些不难发现由于每次跳k格,只需要利用前缀和思想和前面预处理的结果即可做差求出。
然后枚举删除平台的个数,例用预处理结果直接求答案。
时间复杂度O(n)O(n)O(n)
有一个dt的地方就是如何用数组存预处理结果,我们需要这样大小为数组cnt[k][n/k]cnt[i][j]表示从i开始向后跳j次也就是跳了jk个格子。
数组显然不能开,这里用动态数组vector存储

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=100010;int main()
{//IO;int T=1;cin>>T;while(T--){int n,p,k;cin>>n>>p>>k;string s;cin>>s;s="0"+s;ll x,y; cin>>x>>y;ll res=1e18;vector<vector<int> > cnt(k+1,vector<int>(n/k+1,0));for(int i=1;i<=k;i++)for(int j=i;j<=n;j+=k){if(j!=i) cnt[i][(j-i)/k]=cnt[i][(j-i)/k-1];if(s[j]=='0') cnt[i][(j-i)/k]++;}for(int i=1;i<=n;i++){ll now=y*(i-1);int j=i+p-1;if(j>n) continue;int w=(j-1)%k+1;int l=(j-w)/k,r=(n-w)/k;now+=x*cnt[w][r];if(l>0) now-=x*cnt[w][l-1];res=min(res,now);}cout<<res<<'\n';}return 0;
}

jly代码
大体思路就是从后往前计算出需要从某个点向后跳需要添加平台的个数,然后枚举删除平台的个数。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=100010;
int main()
{//IO;int T=1;cin>>T;while(T--){int n,p,k;cin>>n>>p>>k;--p;string s;cin>>s;int x,y;cin>>x>>y;int ans=1e9;vector<int> dp(n);for(int i=n-1;i>=0;i--){dp[i]=(s[i]=='0')?x:0;if(i+k<n) dp[i]+=dp[i+k];}for(int i=p;i<n;i++) ans=min(ans,(i-p)*y+dp[i]);cout<<ans<<'\n';}return 0;
}

思维还是不行,别人10分钟A的题,自己1h还差点没过。。
要加油哦~

codeforces1457 C. Bouncing Ball相关推荐

  1. 1415C. Bouncing Ball

    C. Bouncing Ball:题目 很好的dp,1400分难见的题 #include <bits/stdc++.h> using namespace std; #define int ...

  2. 怎么在电脑上使用python-开始在 Windows 上使用 Python(初学者)

    开始在 Windows 上使用 Python(初学者)Get started using Python on Windows for beginners 07/19/2019 本文内容 下面是一个分步 ...

  3. 达拉草201771010105《面向对象程序设计(java)》第十六周学习总结

    达拉草201771010105<面向对象程序设计(java)>第十六周学习总结 第一部分:理论知识 1.程序与进程的概念: (1)程序是一段静态的代码,它是应用程序执行的蓝 本. (2)进 ...

  4. 3Delight NSI: A Streamable Render API

    3Delight是应用于高端电影级别渲染的软件渲染器,迄今为止已经参与了无数的电影制作,具体可以参见链接. 如果你对3Delight的印象就依然是RenderMan的替代品,那就显然已经和时代发展脱节 ...

  5. 201771010126 王燕《面向对象程序设计(Java)》第十六周学习总结

    实验十六  线程技术 实验时间 2017-12-8 1.实验目的与要求 (1) 掌握线程概念: ‐多线程 是进程执行过中产生的多条线索. 是进程执行过中产生的多条线索. 是进程执行过中产生的多条线索. ...

  6. [转]Windows Phone 7程序设计”完全版电子书可以免费下载了

    本文转自:http://www.cnblogs.com/salam/archive/2010/10/29/1864246.html 现在学习Windows Phone 7开发资料十分有限,除了MSDN ...

  7. javascript创建类_如何使用JavaScript创建吹气效果

    javascript创建类 Have you ever wondered how you can create a realistic air blowing effect with JavaScri ...

  8. 国际C语言混乱代码大赛结果公布

    国际C语言混乱代码大赛(IOCCC, The International Obfuscated C Code Contest)是一项国际编程赛事,从1984年开始,每年举办一次(1997年.1999年 ...

  9. 201771010109焦旭超《面向对象程序设计(java)》第十六周学习总结

    1.实验目的与要求 (1) 掌握线程概念: (2) 掌握线程创建的两种技术: (3) 理解和掌握线程的优先级属性及调度方法: (4) 掌握线程同步的概念及实现技术: 2.实验内容和步骤 实验1:测试程 ...

最新文章

  1. 一文详尽系列之EM算法
  2. Java IO流学习总结六:ByteArrayInputStream、ByteArrayOutputStream
  3. Java基础知识——Sting、StringBuild、StringBuffer的区别
  4. Eclipse生成jar包
  5. 使多个线程循环输出0-99-0-99
  6. visual studio installer可以卸载吗_技术帖 | 这些宝藏软件你安装了吗?
  7. Netty工作笔记0073---Neety的出站和入站机制
  8. 【AS3代码】AS调用JS
  9. python求成绩平均值_(生活)使用Python计算学生成绩平均值
  10. HDU 5586 Sum (预处理 + 动态规划)
  11. Qt上位机 实现串口助手和网络助手
  12. 电脑蓝屏:缺少bootsafe64_ev.sys
  13. android mcc 模拟,Android 读取MCC, MNC
  14. Reason: Cannot pass null or empty values to constructor in spring security
  15. 什么是射频中经常提到的IQ信号?
  16. 用SerialNumber生成流水号
  17. postman的命令执行工具--newman
  18. JS判断是否为safari苹果浏览器
  19. task定时任务不能自动注入 问题解决办法
  20. 剑指offer_073 狒狒吃香蕉

热门文章

  1. mysql binlog oplog_mongodb 学习之oplog
  2. java collator_Java Collator compare(String, String)用法及代码示例
  3. eclipse访问别人 mysql数据库_eclipse访问mysql数据库!
  4. 移动端h5唤起键盘_移动端H5界面打开后,如何自动调用软键盘
  5. python网页动图_python,tensorflow线性回归Django网页显示Gif动态图
  6. python怎么安装bokeh_python怎么安装bokeh
  7. leetcode904. 水果成篮(滑动窗口)
  8. dptcpp 题目 2352: [信息学奥赛一本通-T1440]数的划分-dp
  9. 给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构(算法导论第十章10.4-3)
  10. php mvc多态实例,asp.net mvc-多态模型绑定