Codeforces Round #419
A
找最近的回文时间
模拟 往后推 判判就行
//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
int tx,ty,T;
bool check(){
int rx=tx/,ry=tx%;
return ry*+rx==ty;
}
int main(){
scanf("%d:%d",&tx,&ty);
while(){
if(check()){printf("%d\n",T);return ;}
T++,ty++;
if(ty==)tx++,ty=;
if(tx==)tx=;
}
}
B
差分前缀和推一发完事~
//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
const int N=;
int n,k,q,xx,yy,a[N],s[N];
int main(){
scanf("%d%d%d",&n,&k,&q);
for(int i=;i<=n;i++)scanf("%d%d",&xx,&yy),a[xx]++,a[yy+]--;
for(int i=;i<N;i++)a[i]+=a[i-];
for(int i=;i<N;i++)s[i]=s[i-]+(a[i]>=k);
for(int i=;i<=q;i++)scanf("%d%d",&xx,&yy),printf("%d\n",s[yy]-s[xx-]);
}
C
贪心
先把整张图能删的都删了 再枚举行、列
输出比较烦
//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
const int N=;
int n,m,a[N][N],minn=N,rec[N],recl[N],T;
int main(){
scanf("%d%d",&n,&m);memset(rec,0x3f,sizeof(rec));memset(recl,0x3f,sizeof(recl));
for(int i=;i<=n;i++)for(int j=;j<=m;j++)scanf("%d",&a[i][j]),minn=min(minn,a[i][j]);
for(int i=;i<=n;i++)for(int j=;j<=m;j++)a[i][j]-=minn;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++)rec[i]=min(rec[i],a[i][j]);
for(int j=;j<=m;j++)a[i][j]-=rec[i];
}
for(int i=;i<=n;i++)for(int j=;j<=m;j++)if(a[i][j]!=a[][j]){puts("-1");return ;}else recl[j]=min(recl[j],a[i][j]);
for(int i=;i<=n;i++)for(int j=;j<=rec[i];j++)T++;
for(int i=;i<=m;i++)for(int j=;j<=recl[i];j++)T++;
if(n<m)for(int i=;i<=minn;i++)for(int j=;j<=n;j++)T++;
else for(int i=;i<=minn;i++)for(int j=;j<=m;j++)T++;
printf("%d\n",T);
for(int i=;i<=n;i++)for(int j=;j<=rec[i];j++)printf("row %d\n",i);
for(int i=;i<=m;i++)for(int j=;j<=recl[i];j++)printf("col %d\n",i);
if(n<m)for(int i=;i<=minn;i++)for(int j=;j<=n;j++)printf("row %d\n",j);
else for(int i=;i<=minn;i++)for(int j=;j<=m;j++)printf("col %d\n",j);
}
D
这题好难啊...
把奇数列盖住
(观察?)可得
偶数列 一个数 等于它上一列左边的加上它上一列右边的
别问我怎么观察出来的 我没有观察出来
推到偶数列
杨辉三角
最后判一判剩的是加号还是减号
搞一起就行了..
//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
const int N=,mod=;
int n,a[N],ans1,ans2,tot,fac[N],inv[N];
int C(int x,int y){return 1ll*fac[x]*inv[y]%mod*inv[x-y]%mod;}
int pow(int x,int y){
int r=;
while(y){
if(y&)r=1ll*r*x%mod;
x=1ll*x*x%mod,y>>=;
}return r;
}
int main(){
scanf("%d",&n),fac[]=;
for(int i=;i<=n;i++)scanf("%d",&a[i]),tot+=i-;
for(int i=;i<=n;i++)fac[i]=1ll*fac[i-]*i%mod;
for(int i=;i<=n;i++)inv[i]=pow(fac[i],mod-);
if(n==){printf("%d\n",a[]);return ;}
if(n&){
for(int i=;i<n;i++)a[i]=i&?(a[i]+a[i+]):(a[i]-a[i+]);n--;
}
for(int i=;i<=n;i+=)ans1=(ans1+1ll*a[i]*C(n/-,i/))%mod;
for(int i=;i<=n;i+=)ans2=(ans2+1ll*a[i]*C(n/-,i/-))%mod;
printf("%d\n",((tot&?(ans1+ans2)%mod:ans1-ans2)+mod)%mod);
}
E
树形DP
f[x][j] x子树必须用优惠券 选了j个
g[x][j] x子树必须不用优惠券 选了j个
g[x]->g[x]
f[x]&g[x]->f[x]
//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
const int N=;
int first[N],nxt[N],v[N],tot,c[N],d[N],fa[N],n,k,f[N][N],g[N][N],size[N],ans;
void add(int x,int y){v[tot]=y,nxt[tot]=first[x],first[x]=tot++;}
void dfs(int x){
f[x][]=g[x][]=,size[x]=;g[x][]=c[x];
for(int i=first[x];~i;i=nxt[i]){
dfs(v[i]);
for(int j=size[x];~j;j--){
for(int k=size[v[i]];~k;k--){
f[x][j+k]=min(f[x][j+k],f[x][j]+f[v[i]][k]);
}
}
for(int j=size[x];~j;j--){
for(int k=size[v[i]];~k;k--){
g[x][j+k]=min(g[x][j+k],g[x][j]+g[v[i]][k]);
}
}
size[x]+=size[v[i]];
}
for(int i=size[x];i;i--)f[x][i]=min(g[x][i],f[x][i-]+c[x]-d[x]);
}
int main(){
memset(first,-,sizeof(first));
memset(f,0x3f,sizeof(f));
memset(g,0x3f,sizeof(g));
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++){
scanf("%d%d",&c[i],&d[i]);
if(i!=)scanf("%d",&fa[i]),add(fa[i],i);
}dfs();
for(int i=;i<=n;i++)if(f[][i]<=k)ans=i;
printf("%d\n",ans);
}
Div1 D
线段树 区间覆盖 区间求和...
按照a排序 那么从大到小 nowb>b[i]||nowc>c[i]
用总方案数减去不合法的
就是all-左下角的一块矩形
a变小的时候 就会有nowb>b[i]&&nowc>c[i]
就把一块都覆盖住就好了
x轴是b y轴是c 单调递减
//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=;
typedef long long ll;
int n,a,b,c,minn[N*],maxx[N*],lazy[N*];
ll sum[N*],ans;
struct Node{int x,y,z;}node[N];
void setlazy(int num,int pos,int wei){sum[pos]=1ll*num*wei;maxx[pos]=minn[pos]=lazy[pos]=wei;}
void push_down(int l,int r,int pos){
int mid=(l+r)>>,lson=pos<<,rson=lson|;
setlazy(mid-l+,lson,lazy[pos]),setlazy(r-mid,rson,lazy[pos]);
lazy[pos]=;
}
void push_up(int pos){
int lson=pos<<,rson=lson|;
sum[pos]=sum[lson]+sum[rson],minn[pos]=min(minn[lson],minn[rson]),maxx[pos]=max(maxx[lson],maxx[rson]);
}
void insert(int l,int r,int pos,int L,int R,int wei){
if(wei<=minn[pos])return;
if(lazy[pos])push_down(l,r,pos);
if(l>=L&&r<=R&&maxx[pos]<=wei){setlazy(r-l+,pos,wei);return;}
int mid=(l+r)>>,lson=pos<<,rson=pos<<|;
if(mid<L)insert(mid+,r,rson,L,R,wei);
else if(mid>=R)insert(l,mid,lson,L,R,wei);
else insert(l,mid,lson,L,R,wei),insert(mid+,r,rson,L,R,wei);
push_up(pos);
}
bool cmp(Node a,Node b){return a.x>b.x;}
int main(){
scanf("%d%d%d%d",&n,&a,&b,&c);
for(int i=;i<=n;i++){
scanf("%d%d%d",&node[i].x,&node[i].y,&node[i].z);
insert(,b,,,node[i].y,node[i].z);
}sort(node+,node++n,cmp);
for(int i=a,j=;i;i--){
for(;j<=n&&node[j].x==i;j++)insert(,b,,,node[j].y,c),insert(,b,,,b,node[j].z);
ans+=1ll*b*c-sum[];
}printf("%I64d\n",ans);
}
Div1 E 不会-> ->
Codeforces Round #419的更多相关文章
- Codeforces Round #419 D. Karen and Test
Karen has just arrived at school, and she has a math test today! The test is about basic addition an ...
- Codeforces Round #419 (Div. 2) E. Karen and Supermarket(树形dp)
http://codeforces.com/contest/816/problem/E 题意: 去超市买东西,共有m块钱,每件商品有优惠卷可用,前提是xi商品的优惠券被用.问最多能买多少件商品? 思路 ...
- Codeforces Round #419 (Div. 2) B. Karen and Coffee(经典前缀和)
http://codeforces.com/contest/816/problem/B To stay woke and attentive during classes, Karen needs s ...
- Codeforces Round #419 (Div. 2) A. Karen and Morning(模拟)
http://codeforces.com/contest/816/problem/A 题意: 给出一个时间,问最少过多少时间后是回文串. 思路: 模拟,先把小时的逆串计算出来: ① 如果逆串=分钟, ...
- Codeforces Round #419 (Div. 2)
1.题目A:Karen and Morning 题意: 给出hh:mm格式的时间,问至少经过多少分钟后,该时刻为回文字符串? 思路: 简单模拟,从当前时刻开始,如果hh的回文rh等于mm则停止累计.否 ...
- codeforces round #419 E. Karen and Supermarket
On the way home, Karen decided to stop by the supermarket to buy some groceries. She needs to buy a ...
- codeforces round #419 C. Karen and Game
C. Karen and Game time limit per test 2 seconds memory limit per test 512 megabytes input standard i ...
- codeforces round #419 B. Karen and Coffee
To stay woke and attentive during classes, Karen needs some coffee! Karen, a coffee aficionado, want ...
- codeforces round #419 A. Karen and Morning
Karen is getting ready for a new school day! It is currently hh:mm, given in a 24-hour format. As yo ...
- Codeforces Round #419 Div. 1
A:暴力枚举第一列加多少次,显然这样能确定一种方案. #include<iostream> #include<cstdio> #include<cmath> #in ...
随机推荐
- 洛谷 1091 合唱队形(NOIp2004提高组)
[题解] 分别做一遍最长上升序列和最长下降序列,再枚举峰的位置计算答案即可. #include<cstdio> #include<algorithm> #include< ...
- Postman用法简介----https://blog.csdn.net/flowerspring/article/details/52774399
https://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介
- [K/3Cloud]有关单据显示行数限制和数据导出的建议
1.针对显示行数限制: 模仿现在很流行的"查看更多"的模式,动态加载数据. 我相信这一点建议别人也提过,还请总部对此开展头脑风暴,因为在实际使用中客户总是不理解为何要限制行数,解释 ...
- Oracle 11.2.0.4.0安装
http://opensgalaxy.com/2015/08/25/oracle11-2-0-4-0%E5%AE%89%E8%A3%85%E5%8F%8A%E8%A1%A5%E4%B8%81%E8%8 ...
- Eureka集群的那些坑
今天遇到一个Eureka集群的一个坑. 问题现场类似是这样的:两台Eureka组成的服务注册中心集群,两台服务提供方server1.server2,两个服务调用方client1.client2. 正常 ...
- SiteMesh2-sitemesh.xml的其它映射器的用法
在sitemesh.xml中做常用的三个映射器,总结如下: 映射器元素的顺序确定优先级.良好的应用程序应使用以下顺序, Parameter query = ParameterDecoratorMapp ...
- Windows下Redis的安装与部署
1.下载地址:https://github.com/MSOpenTech/redis/releases 2.下载zip的包,下载后放到需要安装的目录进行解压操作,列如:F:\Redis\Redis-x ...
- Manthan, Codefest 16 F
寻找树上最大权值和的两条不相交的路径. 树形DP题.挺难的,对于我…… 定义三个变量ma[MAXN], t[MAXN], sum[MAXN] 其中,ma[i]代表i子树中,最长的路径和 t[i]代表i ...
- Java - this的使用方法
this在内部获得当前对象的引用时调用: (1) return返回当前对象; (2) 构造器调用还有一个构造器, 带參数; (3) 參数的名称和数据成员的名称同样; 注意: this构造器在方法中仅仅 ...
- J2EE肌肉系统—四层模型
J2EE是基于JAVA技术的一种标准.为什么会有这种标准呢? 主要是在企业级应用开发其中有一些需求.比如数据库连接,邮件服务.事件处理等,都是一些通用模块. 而这些模块假设由开发者来开发.势必添加开发 ...