D. Stressful Training

题目链接:https://codeforces.com/contest/1132/problem/D

题意:

有n台电脑,每台电脑都有初始电量ai,也有一个耗电量bi,意即每1s耗电多少,现在你有一个充电器,它每s可以给一台电脑充x的点亮。

问x最少为多少,可以让所有电脑直至k时刻,点亮都不小于0。

题解:

我们考虑贪心,先给最需要充电的电脑充电,然后二分答案x去检验。大概思路就是这样吧...但是实现起来还是有点困难。

首先处理出每个电脑最晚需要充电的时刻ti,然后每次用一个指针找到第一个需要充电的时刻,不断给这个电脑充电直至这个电脑在下一秒不会没电,然后就更新它的时间。

这个时间复杂度是O(n+k)的,如果用优先队列,代码实现起来就比较简单,但是时间复杂度就多个log,但是cf评测机比较好,还是可以卡过的。

具体细节建议自己去实现一下吧,这样才有更深的体会,代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5+;
ll n,k;
ll a[N],b[N],c[N];
vector <ll> vec[N];
bool check(ll x){
//x=25;
for(int i=;i<=k;i++) vec[i].clear();
memcpy(c,a,sizeof(a));
for(int i=;i<=n;i++){
ll pos=a[i]/b[i]+;
if(pos<=k){
vec[pos].push_back(i);
c[i]=a[i]%b[i];
}
}
ll last=;
for(int i=;i<=k;i++){
while(last<=k&&vec[last].empty()) last++;
if(last==k+) return true;
if(last<i) return false ;
int now = vec[last].back();
if(c[now]+x<b[now]){
c[now]+=x;
continue ;
}
c[now]+=x;
vec[last].pop_back();
if(last+c[now]/b[now]<=k){
vec[last+c[now]/b[now]].push_back(now);
c[now]%=b[now];
}
}
return true;
}
int main(){
cin>>n>>k;
for(int i=;i<=n;i++) cin>>a[i];
for(int i=;i<=n;i++) cin>>b[i];
ll l=,r=1e16,mid;
while(l<r){
mid=(l+r)/;
if(check(mid)) r=mid;
else l=mid+;
}
if(l==1e16) cout<<-;
else cout<<r;
return ;
}

F. Clear the String

题目链接:https://codeforces.com/contest/1132/problem/F

题意:

给出一个字符串,每次可以消去相同的连续字符,然后问最少需要几次能将这个字符串全部消去。

题解:

这题主要的关键就是发现无论怎么消,都会和两边的一起消。那么我们就可以类似于区间dp那样通过枚举确定两个边界进行转移了。

枚举中间点的时候,如果发现那个中间点和左端点的字符相同,那么我们就可以将那个中间点和左端点一起消。

反正这个题的解法很多就是了~转移方程也很多。

具体见代码吧:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ,INF = 0x3f3f3f3f3f;
int n;
char s[N];
int dp[N][N];
int main(){
scanf("%d",&n);
scanf("%s",s+);
memset(dp,INF,sizeof(dp));
for(int i=;i<=n;i++) dp[i][i]=;
for(int l=;l<=n;l++){
for(int i=;i<=n;i++){
int j=i+l-;
if(j>n) break ;
for(int k=i;k<j;k++){
if(s[i]==s[j]) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+][j]-);
else dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+][j]);
}
}
}
cout<<dp[][n];
return ;
}

最新文章

  1. 【BZOJ】4056: [Ctsc2015]shallot
  2. fonts.useso.com 访问变慢
  3. metasploit升级(BT5)
  4. 那些Xcode不能错过的插件
  5. Java 读取文件到字符串
  6. POJ 1986 DIstance Query LCA水题
  7. CSS3中的网格
  8. OpenSSH 密钥管理:RSA/DSA 认证(转载)
  9. 【剑指offer】面试题24:二叉搜索树的后序遍历序列
  10. HDU 4267 线段树 离散点区间更新, 自叶子节点至根单点查询
  11. 06-IOSCore - KVC、CoreData
  12. 最近客户的apache+php环境运行很慢解决
  13. mybatis运行时错误Illegal argument exception argument type mismatch
  14. string用法总结
  15. 关系型数据库工作原理-查询优化器之索引(翻译自Coding-Geek文章)
  16. 知识小罐头08(tomcat8启动源码分析 上)
  17. ubuntu16下安装openssh
  18. Microsoft SQL - 学习总目录
  19. HTML5的自定义属性的使用总结
  20. 三篇文章了解 TiDB 技术内幕——说计算

热门文章

  1. 【MySQL解惑笔记】Navicat 无法远程连接MySQL数据库
  2. IntelliJ IDEA 2017.3/2018.1/.2 激活
  3. php+原生ajax实现图片文件上传功能实例
  4. $http.get(...).success is not a function 错误解决
  5. 寒假作业end
  6. android 出现Make sure the Cursor is initialized correctly before accessing data from it
  7. LintCode-371.用递归打印数字
  8. (十一)instanceof 和 getclass 的区别
  9. 3dContactPointAnnotationTool开发日志(二十)
  10. phpcms退出 提示 :退出成功0 。 的解决办法