Link:

Codeforces #210 传送门

A:

贪心,对每个值都取最大值,不会有其他解使答案变优

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. #define X first
  5. #define Y second
  6. typedef long long ll;
  7. typedef pair<int,int> P;
  8. typedef double db;
  9. const int MAXN=,INF=<<;
  10. struct data{int op,l,r,x;}dat[MAXN];
  11. int n,m,mx[MAXN],vis[MAXN];
  12.  
  13. int main()
  14. {
  15. scanf("%d%d",&n,&m);
  16. for(int i=;i<=m;i++)
  17. scanf("%d%d%d%d",&dat[i].op,&dat[i].l,&dat[i].r,&dat[i].x);
  18. for(int i=;i<=n;i++)
  19. {
  20. int tmp=;mx[i]=INF;
  21. for(int j=;j<=m;j++)
  22. if(dat[j].op==&&i>=dat[j].l&&i<=dat[j].r)
  23. tmp+=dat[j].x;
  24. else if(dat[j].op==&&i>=dat[j].l&&i<=dat[j].r)
  25. mx[i]=min(mx[i],dat[j].x-tmp);
  26. }
  27. for(int i=;i<=n;i++)
  28. {
  29. if(mx[i]==INF) mx[i]=;
  30. int tmp=mx[i];
  31. for(int j=;j<=m;j++)
  32. if(dat[j].op==&&i>=dat[j].l&&i<=dat[j].r)
  33. tmp+=dat[j].x;
  34. else if(dat[j].op==&&i>=dat[j].l&&i<=dat[j].r&&tmp==dat[j].x)
  35. vis[j]++;
  36. }
  37. for(int i=;i<=m;i++)
  38. if(dat[i].op==&&!vis[i]) return puts("NO"),;
  39. puts("YES");
  40. for(int i=;i<=n;i++)
  41. printf("%d ",mx[i]);
  42. return ;
  43. }

Problem A

B:

答案可行性单调,二分答案

每次判断用$dp[i]$表示到$i$只要要删多少个数,$i$必取

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. typedef long long ll;
  5. typedef pair<int,int> P;
  6. const int MAXN=2e3+;
  7. int n,k,l,r,dat[MAXN],dp[MAXN];
  8.  
  9. bool check(int x)
  10. {
  11. int ret=n;
  12. for(int i=;i<=n;i++) dp[i]=i-;
  13. for(int i=;i<=n;i++)
  14. for(int j=;j<i;j++)
  15. if(abs(dat[i]-dat[j])<=1ll*x*(i-j))
  16. dp[i]=min(dp[i],dp[j]+i-j-);
  17. for(int i=;i<=n;i++)
  18. ret=min(ret,dp[i]+n-i);
  19. return ret<=k;
  20. }
  21.  
  22. int main()
  23. {
  24. scanf("%d%d",&n,&k);
  25. for(int i=;i<=n;i++) scanf("%d",&dat[i]);
  26. l=;r=2e9;
  27. while(l<=r)
  28. {//注意爆long long
  29. int mid=l/+r/+(l%+r%)/;
  30. if(check(mid)) r=mid-;
  31. else l=mid+;
  32. }
  33. printf("%d",l);
  34. return ;
  35. }

Problem B

$i$必取这个条件一定要加,否则无法转移

同时注意二分时$l+r$可能爆$longlong$

C:

想到从前往后$dp$,每次按以$i$为左端点时对答案的贡献转移

但这样在$t[i]=s[i]$时是后项相关的,不符合$dp$要求

因此要将$t[i]=s[i]$合并在$t[i]>s[i]$中计算,$t[i]>s[i]$时的贡献变为$(pre+1)*(n-i+1)$

$dp[i][j]$:以前$i$位为左端点结果为$j$的方案数,分$t[i]>s[i]$与$t[i]<s[i]$枚举$pre$转移

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. typedef long long ll;
  5. const int MAXN=2e3+,MOD=1e9+;
  6. int n,k;char s[MAXN];
  7. ll pre[MAXN][MAXN],dp[MAXN][MAXN];
  8.  
  9. int main()
  10. {
  11. scanf("%d%d%s",&n,&k,s+);
  12. dp[][]=pre[][]=;
  13. for(int i=;i<=n;i++)
  14. for(int j=;j<=k;j++)
  15. {
  16. dp[i][j]=pre[i-][j]*(s[i]-'a')%MOD;
  17. for(int k=;(k+)*(n-i+)<=j&&k<i;k++)
  18. (dp[i][j]+=dp[i-k-][j-(k+)*(n-i+)]*('z'-s[i]))%=MOD;
  19. pre[i][j]=(pre[i-][j]+dp[i][j])%MOD;
  20. }
  21. printf("%lld",pre[n][k]);
  22. return ;
  23. }

Problem C

[Codeforces #210] Tutorial的更多相关文章

  1. [Codeforces #172] Tutorial

    Link: Codeforces #172 传送门 A: 一眼看上去分两类就可以了 1.每个矩形只有两条边相交,重合的形状为菱形 2.每个矩形四条边都有相交 对于情况1答案为$h*h/sin(a)$ ...

  2. [Codeforces #514] Tutorial

    Link: Codeforces #514 传送门 很简单的一场比赛打崩了也是菜得令人无话可说…… D: 一眼二分,发现对于固定的半径和点,能包含该点的圆的圆心一定在一个区间内,求出区间判断即可 此题 ...

  3. [Codeforces #196] Tutorial

    Link: Codeforces #196 传送门 A: 枚举 #include <bits/stdc++.h> using namespace std; #define X first ...

  4. [Codeforces #174] Tutorial

    Link: Codeforces #174 传送门 A: 求原根的个数,有一条性质是原根个数为$\phi(\phi(n))$,多了一个不会证的性质 如果要确定哪些是原根的话还是要枚举,不过对于每个数不 ...

  5. [Codeforces #190] Tutorial

    Link: Codeforces #190 传送门 A: 明显答案为$n+m-1$且能构造出来 #include <bits/stdc++.h> using namespace std; ...

  6. [Codeforces #211] Tutorial

    Link: Codeforces #211 传送门 一套非常简单的题目,但很多细节都是错了一次才能发现啊…… 还是不能养成OJ依赖症,交之前先多想想corner case!!! A: 模拟,要特判0啊 ...

  7. [Codeforces #192] Tutorial

    Link: Codeforces #192 传送门 前两天由于食物中毒现在还要每天挂一天的水 只好晚上回来随便找套题做做找找感觉了o(╯□╰)o A: 看到直接大力模拟了 但有一个更简便的方法,复杂度 ...

  8. [Codeforces #201] Tutorial

    Link: 传送门 代码量很少的一套思维题 A: 试一试发现最后状态一定是所有$min,max$间$gcd$的倍数 直接判断数量的奇偶性即可 #include <bits/stdc++.h> ...

  9. [Codeforces #188] Tutorial

    Link: Codeoforces #188 传送门 A: 先全转为正数,后面就全是指数级增长了 #include <bits/stdc++.h> using namespace std; ...

随机推荐

  1. 【洛谷 P2763】 试题库问题(最大流)

    题目链接 6/23 这是网络流23题里我第一个没看题解自己写出来一遍过的.. 这题应该是最简单的模型了吧. 从源点向每个类型连一条流量为这个类型要的题数,再从每个类型向可以属于这个类型的所有试题连一条 ...

  2. Perl6 Bailador框架(4):路径匹配

    use v6; use Bailador; =begin pod /:one/:two/:....路径选择 这个路径, 用/分隔 每个/分隔一个, 如果你只设置两个(/admin/login),时, ...

  3. postman测试express restful接口

    安装express及postman var express = require('express') var app = express(); var calculation = require('. ...

  4. android datepicker timepicker简单用法

    1.效果图 2. xml布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

  5. 【总结】IE和Firefox的Javascript兼容性总结

    长久以来JavaScript兼容性一直是Web开发者的一个主要问题.在正式规范.事实标准以及各种实现之间的存在的差异让许多开发者日夜煎熬.为此,主要从以下几方面差异总结IE和Firefox的Javas ...

  6. 解决Ubuntu的错误提示

    如果你是一个Ubuntu用户,也许偶尔甚至经常,遇到这样一个错误提示“System Program problem detected”. Ubuntu有一个内建的实用程序叫做Apport, 当一个程序 ...

  7. leetcode 之Set Matrix Zeroes(10)

    设置两个布尔数组,记录行和列是否存在0.需要注意的是如何将行或列设为0. void setZeros(vector<vector<int>> &matrix) { in ...

  8. yum 安装 jdk

    https://www.cnblogs.com/kevingrace/p/5870814.html yum -y list java* 以yum库中java-1.7.0为例注:“*”表示将java-1 ...

  9. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记5——Direct3D中的顶点缓存和索引缓存

    第12章 Direct3D绘制基础 1. 顶点缓存 计算机所描绘的3D图形是通过多边形网格来构成的,网网格勾勒出轮廓,然后在网格轮廓的表面上贴上相应的图片,这样就构成了一个3D模型.三角形网格是构建物 ...

  10. stl 学习笔记

    1. Erasing multiple objects from a std::vector https://stackoverflow.com/questions/3487717/erasing-m ...