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 简要题解的更多相关文章

  1. [AtCoder] Yahoo Programming Contest 2019

    [AtCoder] Yahoo Programming Contest 2019   很遗憾错过了一场 AtCoder .听说这场是涨分场呢,于是特意来补一下题. A - Anti-Adjacency ...

  2. [AtCoder] NIKKEI Programming Contest 2019 (暂缺F)

    [AtCoder] NIKKEI Programming Contest 2019   本来看见这一场的排名的画风比较正常就来补一下题,但是完全没有发现后两题的AC人数远少于我补的上一份AtCoder ...

  3. 【AtCoder】Yahoo Programming Contest 2019

    A - Anti-Adjacency K <= (N + 1) / 2 #include <bits/stdc++.h> #define fi first #define se se ...

  4. AtCoder NIKKEI Programming Contest 2019 C. Different Strokes (贪心)

    题目链接:https://nikkei2019-qual.contest.atcoder.jp/tasks/nikkei2019_qual_C 题意:给出 n 种食物,Takahashi 吃下获得 a ...

  5. AtCoder NIKKEI Programming Contest 2019 E. Weights on Vertices and Edges (并查集)

    题目链接:https://atcoder.jp/contests/nikkei2019-qual/tasks/nikkei2019_qual_e 题意:给出一个 n 个点 m 条边的无向图,每个点和每 ...

  6. Yahoo Programming Contest 2019 补题记录(DEF)

    D - Ears 题目链接:D - Ears 大意:你在一个\(0-L\)的数轴上行走,从整数格出发,在整数格结束,可以在整数格转弯.每当你经过坐标为\(i-0.5\)的位置时(\(i\)是整数),在 ...

  7. Yahoo Programming Contest 2019.F.Pass(DP)

    题目链接 惊了这是什么F题...怎么我都能做出来...以后atcoder的比赛也不能走神了万一有个这样的F呢(CF已有多次了= =) \(f[i][j]\)表示Takahashi现在一共有\(i\)个 ...

  8. Yahoo Programming Contest 2019 自闭记

    A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...

  9. atcoder NIKKEI Programming Contest 2019 E - Weights on Vertices and Edges

    题目链接:Weights on Vertices and Edges 题目大意:有一个\(n\)个点\(m\)条边的无向图,点有点权,边有边权,问至少删去多少条边使得对于剩下的每一条边,它所在的联通块 ...

随机推荐

  1. Python输出格式全总结

    输入输出 有几种方法可以显示程序的输出:数据可以以人类可读的形式打印出来,或者写入文件以供将来使用.本章将讨论一些可能性. 更漂亮的输出格式 到目前为止,我们遇到了两种写入值的方法:表达式语句 和 p ...

  2. 006 --MySQL索引原理

    一 .索引的概念? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化 ...

  3. 【坚持】Selenium+Python学习之从读懂代码开始 DAY7

    2018/05/25 EC [EC](https://github.com/easonhan007/webdriver_guide/blob/master/34/expected_conditions ...

  4. java事物详解

    一.什么是Java事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (iso ...

  5. CHAPTER 25 The Greatest Show on Earth 第25章 地球上最壮观的演出

    CHAPTER 25 The Greatest Show on Earth 第25章 地球上最壮观的演出 Go for a walk in the countryside and you will f ...

  6. xocde missing file 解决方法

    创建一个警告里丢失的文件 托到警报的目录下 重启xcode 警告消失 在xcode中选中这个文件右键delete再次删掉文件,就OK了.

  7. resize2fs命令详解

    基础命令学习目录首页 原文链接:http://blog.51cto.com/woyaoxuelinux/1870299   resize2fs:调整ext文件系统的空间大小  搭配逻辑卷lv使用方法: ...

  8. python判断文件和文件夹是否存在、没有则创建文件夹

    原文出处:https://www.cnblogs.com/hushaojun/p/4533241.html >>> import os >>> os.path.ex ...

  9. python实现将json数据以json格式写入txt文件

    json.dumps中indent参数是设置json缩进量的 举例: tmp = { "aaa" : "111", "bbb" : '222 ...

  10. C++ 类 构造函数 constructor

    构造函数 当定义了一个整型变量: int a; 这会申请了一块内存空间来存储a,但是这块内存中原本有数据的,可能是任何值,这不是你所希望的,若你就希望a表示1,所以要把a的值赋值为1. ; 例: #i ...