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 ;
}

Educational Codeforces Round 61 (Rated for Div. 2) D,F题解的更多相关文章

  1. Educational Codeforces Round 61 (Rated for Div. 2) E 多重背包优化

    https://codeforces.com/contest/1132/problem/E 题意 有8种物品,重量是1~8,每种数量是\(cnt[i]\)(1e16),问容量为W(1e18)的背包最多 ...

  2. Educational Codeforces Round 61 (Rated for Div. 2)-C. Painting the Fence 前缀和优化

    题意就是给出多个区间,要求去掉两个区间,使得剩下的区间覆盖范围最大. 当然比赛的时候还是没能做出来,不得不佩服大佬的各种姿势. 当时我想的是用线段树维护区间和,然后用单点判0,维护区间间断个数.然后打 ...

  3. Educational Codeforces Round 61 (Rated for Div. 2)

    A. Regular Bracket Sequence 题意:给出四种括号的数量 ((  )) ()  )( 问是否可以组成合法的序列(只能排序不能插在另外一个的中间) 思路: 条件一:一个或 n个) ...

  4. Educational Codeforces Round 61 (Rated for Div. 2) E. Knapsack

    非常经典的dp题,因为1至8的最大公约数是840,任何一个数的和中840的倍数都是可以放在一起算的, 所以我只需要统计840*8的值(每个数字(1-8)的sum%840的总和),剩下都是840的倍数 ...

  5. Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)

    #include<bits/stdc++.h>using namespace std;int st[1000007];int top;int s[1000007],t[1000007];i ...

  6. Educational Codeforces Round 61 (Rated for Div. 2)F(区间DP,思维,枚举)

    #include<bits/stdc++.h>typedef long long ll;const int inf=0x3f3f3f3f;using namespace std;char ...

  7. Educational Codeforces Round 61 (Rated for Div. 2)D(二分,模拟,思维)

    #include<bits/stdc++.h>using namespace std;typedef long long ll;int n,k;ll a[200007],b[200007] ...

  8. Educational Codeforces Round 81 (Rated for Div. 2) A-E简要题解

    链接:https://codeforces.com/contest/1295 A. Display The Number 贪心思路,尽可能放置更多位,如果n为奇数,消耗3去放置一个7,剩下的放1 AC ...

  9. Educational Codeforces Round 37 (Rated for Div. 2)C. Swap Adjacent Elements (思维,前缀和)

    Educational Codeforces Round 37 (Rated for Div. 2)C. Swap Adjacent Elements time limit per test 1 se ...

随机推荐

  1. python 终极篇 --- django 路由系统

                          URL配置                        基本格式: from django.conf.urls import url urlpattern ...

  2. 373. Partition Array by Odd and Even【LintCode java】

    Description Partition an integers array into odd number first and even number second. Example Given  ...

  3. [Clr via C#读书笔记]Cp2生成打包部署和管理应用程序和类型

    Cp2生成打包部署和管理应用程序和类型 部署问题 DLL Hell;安装的复杂性:安全性:代码访问安全性. csc.exe的简单使用. 元数据 定义表:引用表:清单表: 程序集 重用,版本控制,安全的 ...

  4. RNN概述-深度学习 -神经网络

    一 RNN概述    前面我们叙述了BP算法, CNN算法, 那么为什么还会有RNN呢?? 什么是RNN, 它到底有什么不同之处? RNN的主要应用领域有哪些呢?这些都是要讨论的问题. 1) BP算法 ...

  5. jupyter notebook 使用cmd命令窗口打开

    第一步:将文件路径改为你需要使用文件所在的路径 第二部:   jupyter notebook

  6. 聊聊、dubbo 找不到 dubbo.xsd 报错

    平常在用 Dubbo 的时候,创建 xml 会提示 http://code.alibabatech.com/schema/dubbo/dubbo.xsd 找不到. 大家可以去 https://gith ...

  7. KVM存储虚拟化---玩转openstack

    KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的. Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种类型,后面会详细讨论.Volume 是 ...

  8. Lecture Sleep(尺取+前缀和)

    Description 你的朋友Mishka和你参加一个微积分讲座.讲座持续n分钟.讲师在第i分钟讲述ai个定理.   米什卡真的对微积分很感兴趣,尽管在演讲的所有时间都很难保持清醒.给你一个米什卡行 ...

  9. iOS-加载html字符串

    NSMutableAttributedString * attrString =[[NSMutableAttributedString alloc] initWithData:[resultModel ...

  10. laravel5.6 后台无法退出,必须清楚浏览器缓存才能退出

    方法一: 在后台,admin/logincontroleer.php 中  可行 public function logout(Request $request) { Auth::logout(); ...