Atcoder Yahoo Programming Contest 2019 简要题解
A-C
直接放代码吧。
A
int n,k;
int main()
{
n=read();k=read();
puts(k<=(n+1)/2?"YES":"NO");
return 0;
}
B
int d[N];pair<int,int>s[10];
int main()
{
for(int i=1,u,v;i<=3;i++){
u=read();v=read();
s[i].first=u;s[i].second=v;
d[u]++;d[v]++;
}
sort(s+1,s+3+1);
for(int i=2;i<=3;i++)if(s[i]==s[i-1])return puts("NO"),0;
for(int i=1;i<=4;i++)if(d[i]>=3)return puts("NO"),0;
return puts("YES"),0;
}
C
int main()
{
int k=read(),a=read(),b=read();ll ans=0;
if(b<=a+2||k<=a-1)printf("%d\n",k+1);
else{
k-=a-1;ans=a;if(k&1)k--,ans++;
printf("%lld\n",ans+1ll*(k/2)*(b-a));
}
return 0;
}
D - Ears
zsy在一条\([0,L]\)的数轴上来回走路。
zsy可以任选\([0,L]\)中的整点作为起点和终点,并且zsy走路时只能在整数位置(\(0,1,2,...,L\))调整方向。
每当zsy向左或向右经过一条\([i,i+1]\ (i\in[0,L))\)的线段时,zsy就会往这条线段的中间放上一个球。
当zsy走完路后,yyb会来到这条数轴。她会进行若干次操作:打爆一个球或在一条线段的中间放上一个球。
现在给出数轴每条线段中间最终球的个数\(a_1,...,a_n\),求出zsy的一种行走方式,使得yyb的操作次数最小。
因为zsy可以反复横跳来回地走,所以可以把\(a_i\)减去若干个2,最后只剩下\(0,1,2\)三种状态。
可以知道对应简化数组的一种最优方案里zsy不会重复走过一条路超过2次。
既然是回路问题,考虑插头dp。
设\(f[i][j][k]\)表示考虑轮廓线到达\(i\),插头有\(j\)个,已经用了\(k\)个单插头的最少代价,
直接转移即可。
int n,t[N];ll suft[N],dp[N][3][3],ans;
inline void upd(ll &a,ll b){a=a<b?a:b;}
inline int calc(int x,int r){
if(r==0)return x;
if(r==1)return x&1?0:1;
if(r==2){if(!x)return 2;else return x&1?1:0;}
}
int main()
{
n=read();for(int i=1;i<=n;i++)t[i]=read();
for(int i=n;i;i--)suft[i]=suft[i+1]+t[i];ans=suft[1];
memset(dp,63,sizeof(dp));dp[0][0][0]=0;
for(int i=0;i<=n;i++)
for(int a=0;a<3;a++)
for(int b=0;b<3;b++){
if(a==0){
upd(dp[i+1][a][b],dp[i][a][b]+t[i+1]);
if(b!=2)upd(dp[i+1][a+1][b+1],dp[i][a][b]+calc(t[i+1],1));
upd(dp[i+1][a+2][b],dp[i][a][b]+calc(t[i+1],2));
}
if(a==1){
if(b!=2)upd(ans,dp[i][a][b]+suft[i+1]);
upd(dp[i+1][a][b],dp[i][a][b]+calc(t[i+1],1));
if(b!=2)upd(dp[i+1][a+1][b+1],dp[i][a][b]+calc(t[i+1],2));
}
if(a==2){
upd(ans,dp[i][a][b]+suft[i+1]);
if(b!=2)upd(dp[i+1][a-1][b+1],dp[i][a][b]+calc(t[i+1],1));
upd(dp[i+1][a][b],dp[i][a][b]+calc(t[i+1],2));
}
}
printf("%lld\n",ans);
return 0;
}
E - Odd Subrectangles
考虑给定行后选出列集合的方案数:
如果行的异或和不为0,那么总有一半的方案选出来异或和为1,另一半为0,因此方案为\(2^{m-1}\)
于是答案变成\(2^{m-1}S\),其中\(S\)表示行向量选出来的异或和不为\(0\)的方案数。
求解选取行向量集合,使其异或和不为0的方案数是一个经典问题:
考虑求出\(n\)个行向量的线性基,设其大小为\(r\)。
如果仅选取线性基中的元素,显然无法使得异或和为\(0\);
那么考虑先选取不在线性基中的元素:
对于这样的一组方案,在线性基中都有唯一的一种选取元素的方案,使得所有元素的异或和为0.
因此\(S=2^n-2^{n-r}\)。
int n,m,a[N][N],now[N],in[N],p[N][N],r;
inline int poww(int a,int b){
int res=1;
for(;b;b>>=1,a=1ll*a*a%mod)
if(b&1)res=1ll*res*a%mod;
return res;
}
int main()
{
n=read();m=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)a[i][j]=read();
for(int i=1;i<=n;i++){
memcpy(now,a[i],sizeof(now));
for(int j=1;j<=m;j++)
if(now[j]){
if(in[j])for(int k=j;k<=m;k++)now[k]^=p[j][k];
else{in[j]=1;memcpy(p[j],now,sizeof(p[j]));r++;break;}
}
}
printf("%lld\n",1ll*(poww(2,n)-poww(2,n-r)+mod)%mod*poww(2,m-1)%mod);
return 0;
}
F - Pass
考虑直接构造最终序列。由传球方式可以知道,第\(i(i\le n)\)个球只会在\(1-i\)个人的手中出现,后\(n\)个求随意。
因此直接设\(f[i][j]\)dp,最后组合数乘一下即可。
char s[N];int n,dp[N][N],c[N][N],ans;
inline void upd(int &a,int b){a+=b;if(a>=mod)a-=mod;}
int main()
{
scanf("%s",s+1);n=strlen(s+1);
for(int i=0;i<=n;i++)
for(int j=c[i][0]=1;j<=i;j++)upd(c[i][j]=c[i-1][j],c[i-1][j-1]);
dp[0][0]=1;
for(int i=1;i<=n;i++)
for(int j=0,c=s[i]-48;j<=i;j++){
if(j>=c-1)upd(dp[i][j],dp[i-1][j-c+1]);
if(j>=c)upd(dp[i][j],dp[i-1][j-c]);
}
for(int i=0;i<=n;i++)upd(ans,1ll*dp[n][i]*c[n][i]%mod);
printf("%d\n",ans);
return 0;
}
Atcoder Yahoo Programming Contest 2019 简要题解的更多相关文章
- [AtCoder] Yahoo Programming Contest 2019
[AtCoder] Yahoo Programming Contest 2019 很遗憾错过了一场 AtCoder .听说这场是涨分场呢,于是特意来补一下题. A - Anti-Adjacency ...
- [AtCoder] NIKKEI Programming Contest 2019 (暂缺F)
[AtCoder] NIKKEI Programming Contest 2019 本来看见这一场的排名的画风比较正常就来补一下题,但是完全没有发现后两题的AC人数远少于我补的上一份AtCoder ...
- 【AtCoder】Yahoo Programming Contest 2019
A - Anti-Adjacency K <= (N + 1) / 2 #include <bits/stdc++.h> #define fi first #define se se ...
- AtCoder NIKKEI Programming Contest 2019 C. Different Strokes (贪心)
题目链接:https://nikkei2019-qual.contest.atcoder.jp/tasks/nikkei2019_qual_C 题意:给出 n 种食物,Takahashi 吃下获得 a ...
- AtCoder NIKKEI Programming Contest 2019 E. Weights on Vertices and Edges (并查集)
题目链接:https://atcoder.jp/contests/nikkei2019-qual/tasks/nikkei2019_qual_e 题意:给出一个 n 个点 m 条边的无向图,每个点和每 ...
- Yahoo Programming Contest 2019 补题记录(DEF)
D - Ears 题目链接:D - Ears 大意:你在一个\(0-L\)的数轴上行走,从整数格出发,在整数格结束,可以在整数格转弯.每当你经过坐标为\(i-0.5\)的位置时(\(i\)是整数),在 ...
- Yahoo Programming Contest 2019.F.Pass(DP)
题目链接 惊了这是什么F题...怎么我都能做出来...以后atcoder的比赛也不能走神了万一有个这样的F呢(CF已有多次了= =) \(f[i][j]\)表示Takahashi现在一共有\(i\)个 ...
- Yahoo Programming Contest 2019 自闭记
A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...
- atcoder NIKKEI Programming Contest 2019 E - Weights on Vertices and Edges
题目链接:Weights on Vertices and Edges 题目大意:有一个\(n\)个点\(m\)条边的无向图,点有点权,边有边权,问至少删去多少条边使得对于剩下的每一条边,它所在的联通块 ...
随机推荐
- kubenetes无法创建pod/创建RC时无法自动创建pod的问题
一.问题概述 问题1: 虽然每次通过yaml创建rc都显示成功了,但是 kubectl get pod却没显示任何的pod. 问题2: 直接通过yaml创建pod提示apixxx 问题3: 通过.js ...
- 布线问题 (NYOJ38)
布线问题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:1.把所有 ...
- MySQL两种引擎的比较
MyISAM,InnoDB主要区别: 1.MyISAM是非事物安全的,InnoDB是事物安全的. 事物安全的特点为更安全,遇到问题会自动恢复或从备份加事物日志回复,如果更新失败,你的所有改变都变回原来 ...
- SICP读书笔记 3.1
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- [Windows][C#][.NET][WPF]基于ArcFace2.0+红外双目摄像头的活体检测
废话不多说 直接上图这个是demo中用到的双目摄像头,一个是红外的,一个是正常的rgb摄像头两个usb接口,在电脑上呈现两路摄像头通道程序检测RGB输出图像,当检测到有人脸时,用RGB人脸的位置到红外 ...
- Linux 做网关
首先创建两张路由表,只需要添加到相应的文件中即可,Linux一共支持255个路由表,rt_tables文件中默认已经存在了三张路由表,分别是: 255 local 254 main 2 ...
- API验证
API验证说明 API验证: a. 发令牌: 静态 PS: 隐患 key被别人获取 b. 动态令牌 PS: (问题越严重)用户生成的每个令牌被黑客获取到,都会破解 c. 高级版本 PS: 黑客网速快, ...
- wordpress登录密码框明文显示最后一个输入的字符
wordpress登录密码框明文显示最后一个输入的字符 (function(a){a.fn.dPassword=function(c){var e={interval:200,duration:100 ...
- Spring MVC controller的方法返回值
ModeAndView 可以在构造时确定需要跳转的页面也可以通过setViewName方法来确定需要跳转的页面 String 指定返回页面的视图名称,页面跳转,如果加了@ResponseBody注解, ...
- bata2
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...