[Codeforces #210] Tutorial
Link:
A:
贪心,对每个值都取最大值,不会有其他解使答案变优
- #include <bits/stdc++.h>
- using namespace std;
- #define X first
- #define Y second
- typedef long long ll;
- typedef pair<int,int> P;
- typedef double db;
- const int MAXN=,INF=<<;
- struct data{int op,l,r,x;}dat[MAXN];
- int n,m,mx[MAXN],vis[MAXN];
- int main()
- {
- scanf("%d%d",&n,&m);
- for(int i=;i<=m;i++)
- scanf("%d%d%d%d",&dat[i].op,&dat[i].l,&dat[i].r,&dat[i].x);
- for(int i=;i<=n;i++)
- {
- int tmp=;mx[i]=INF;
- for(int j=;j<=m;j++)
- if(dat[j].op==&&i>=dat[j].l&&i<=dat[j].r)
- tmp+=dat[j].x;
- else if(dat[j].op==&&i>=dat[j].l&&i<=dat[j].r)
- mx[i]=min(mx[i],dat[j].x-tmp);
- }
- for(int i=;i<=n;i++)
- {
- if(mx[i]==INF) mx[i]=;
- int tmp=mx[i];
- for(int j=;j<=m;j++)
- if(dat[j].op==&&i>=dat[j].l&&i<=dat[j].r)
- tmp+=dat[j].x;
- else if(dat[j].op==&&i>=dat[j].l&&i<=dat[j].r&&tmp==dat[j].x)
- vis[j]++;
- }
- for(int i=;i<=m;i++)
- if(dat[i].op==&&!vis[i]) return puts("NO"),;
- puts("YES");
- for(int i=;i<=n;i++)
- printf("%d ",mx[i]);
- return ;
- }
Problem A
B:
答案可行性单调,二分答案
每次判断用$dp[i]$表示到$i$只要要删多少个数,$i$必取
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef pair<int,int> P;
- const int MAXN=2e3+;
- int n,k,l,r,dat[MAXN],dp[MAXN];
- bool check(int x)
- {
- int ret=n;
- for(int i=;i<=n;i++) dp[i]=i-;
- for(int i=;i<=n;i++)
- for(int j=;j<i;j++)
- if(abs(dat[i]-dat[j])<=1ll*x*(i-j))
- dp[i]=min(dp[i],dp[j]+i-j-);
- for(int i=;i<=n;i++)
- ret=min(ret,dp[i]+n-i);
- return ret<=k;
- }
- int main()
- {
- scanf("%d%d",&n,&k);
- for(int i=;i<=n;i++) scanf("%d",&dat[i]);
- l=;r=2e9;
- while(l<=r)
- {//注意爆long long
- int mid=l/+r/+(l%+r%)/;
- if(check(mid)) r=mid-;
- else l=mid+;
- }
- printf("%d",l);
- return ;
- }
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$转移
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- const int MAXN=2e3+,MOD=1e9+;
- int n,k;char s[MAXN];
- ll pre[MAXN][MAXN],dp[MAXN][MAXN];
- int main()
- {
- scanf("%d%d%s",&n,&k,s+);
- dp[][]=pre[][]=;
- for(int i=;i<=n;i++)
- for(int j=;j<=k;j++)
- {
- dp[i][j]=pre[i-][j]*(s[i]-'a')%MOD;
- for(int k=;(k+)*(n-i+)<=j&&k<i;k++)
- (dp[i][j]+=dp[i-k-][j-(k+)*(n-i+)]*('z'-s[i]))%=MOD;
- pre[i][j]=(pre[i-][j]+dp[i][j])%MOD;
- }
- printf("%lld",pre[n][k]);
- return ;
- }
Problem C
[Codeforces #210] Tutorial的更多相关文章
- [Codeforces #172] Tutorial
Link: Codeforces #172 传送门 A: 一眼看上去分两类就可以了 1.每个矩形只有两条边相交,重合的形状为菱形 2.每个矩形四条边都有相交 对于情况1答案为$h*h/sin(a)$ ...
- [Codeforces #514] Tutorial
Link: Codeforces #514 传送门 很简单的一场比赛打崩了也是菜得令人无话可说…… D: 一眼二分,发现对于固定的半径和点,能包含该点的圆的圆心一定在一个区间内,求出区间判断即可 此题 ...
- [Codeforces #196] Tutorial
Link: Codeforces #196 传送门 A: 枚举 #include <bits/stdc++.h> using namespace std; #define X first ...
- [Codeforces #174] Tutorial
Link: Codeforces #174 传送门 A: 求原根的个数,有一条性质是原根个数为$\phi(\phi(n))$,多了一个不会证的性质 如果要确定哪些是原根的话还是要枚举,不过对于每个数不 ...
- [Codeforces #190] Tutorial
Link: Codeforces #190 传送门 A: 明显答案为$n+m-1$且能构造出来 #include <bits/stdc++.h> using namespace std; ...
- [Codeforces #211] Tutorial
Link: Codeforces #211 传送门 一套非常简单的题目,但很多细节都是错了一次才能发现啊…… 还是不能养成OJ依赖症,交之前先多想想corner case!!! A: 模拟,要特判0啊 ...
- [Codeforces #192] Tutorial
Link: Codeforces #192 传送门 前两天由于食物中毒现在还要每天挂一天的水 只好晚上回来随便找套题做做找找感觉了o(╯□╰)o A: 看到直接大力模拟了 但有一个更简便的方法,复杂度 ...
- [Codeforces #201] Tutorial
Link: 传送门 代码量很少的一套思维题 A: 试一试发现最后状态一定是所有$min,max$间$gcd$的倍数 直接判断数量的奇偶性即可 #include <bits/stdc++.h> ...
- [Codeforces #188] Tutorial
Link: Codeoforces #188 传送门 A: 先全转为正数,后面就全是指数级增长了 #include <bits/stdc++.h> using namespace std; ...
随机推荐
- 【洛谷 P2763】 试题库问题(最大流)
题目链接 6/23 这是网络流23题里我第一个没看题解自己写出来一遍过的.. 这题应该是最简单的模型了吧. 从源点向每个类型连一条流量为这个类型要的题数,再从每个类型向可以属于这个类型的所有试题连一条 ...
- Perl6 Bailador框架(4):路径匹配
use v6; use Bailador; =begin pod /:one/:two/:....路径选择 这个路径, 用/分隔 每个/分隔一个, 如果你只设置两个(/admin/login),时, ...
- postman测试express restful接口
安装express及postman var express = require('express') var app = express(); var calculation = require('. ...
- android datepicker timepicker简单用法
1.效果图 2. xml布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...
- 【总结】IE和Firefox的Javascript兼容性总结
长久以来JavaScript兼容性一直是Web开发者的一个主要问题.在正式规范.事实标准以及各种实现之间的存在的差异让许多开发者日夜煎熬.为此,主要从以下几方面差异总结IE和Firefox的Javas ...
- 解决Ubuntu的错误提示
如果你是一个Ubuntu用户,也许偶尔甚至经常,遇到这样一个错误提示“System Program problem detected”. Ubuntu有一个内建的实用程序叫做Apport, 当一个程序 ...
- leetcode 之Set Matrix Zeroes(10)
设置两个布尔数组,记录行和列是否存在0.需要注意的是如何将行或列设为0. void setZeros(vector<vector<int>> &matrix) { in ...
- yum 安装 jdk
https://www.cnblogs.com/kevingrace/p/5870814.html yum -y list java* 以yum库中java-1.7.0为例注:“*”表示将java-1 ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记5——Direct3D中的顶点缓存和索引缓存
第12章 Direct3D绘制基础 1. 顶点缓存 计算机所描绘的3D图形是通过多边形网格来构成的,网网格勾勒出轮廓,然后在网格轮廓的表面上贴上相应的图片,这样就构成了一个3D模型.三角形网格是构建物 ...
- stl 学习笔记
1. Erasing multiple objects from a std::vector https://stackoverflow.com/questions/3487717/erasing-m ...