A:签到。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
int main()
{int n=read(),m=read();if (m*2-1<=n) cout<<"YES";else cout<<"NO";return 0;
}

  B:直接按欧拉路判,才不管只有四个点。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
int a[5],fa[5];
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
int main()
{for (int i=1;i<=4;i++) fa[i]=i;for (int i=1;i<=3;i++){int x=read(),y=read();a[x]++,a[y]++;fa[find(x)]=find(y);}for (int i=1;i<=4;i++)if (find(i)!=find(1)) {cout<<"NO";return 0;}int cnt=0;for (int i=1;i<=4;i++){if (a[i]&1) cnt++;}if (cnt==2) cout<<"YES";else {cout<<"NO";return 0;}return 0;
}

  C:相当于可以用1代价获得1收益,用2代价获得b-a收益。瞎讨论即可。注意2代价获得b-a收益的前提是当前有至少a块饼干。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
int main()
{int n=read(),a=read(),b=read();b-=a;if (b<=2) cout<<n+1;else{if (n<a) cout<<n+1;else{n-=a-1;ll ans=a;ans+=1ll*b*(n/2);if (n&1) ans++;cout<<ans;}}return 0;
}

  D:相当于找一个形如0 非零偶数 奇数 非零偶数 0 的序列(每一段长度任意且可以为空),使该序列与原序列差的绝对值之和最小。赛时智商急剧下降搞了一大堆前缀和,最后屯完题交的时候网又卡了,发现wa掉的时候只剩下5min,于是就没救了。实际上直接dp不能再好写,即f[i][0/1/2/3/4]表示第i个位置在第j段中时的最小和。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
int n,a[N],delta[N];
ll f[N][5];
//ll ans,f[N][2],s[N],g[N][2],h[N];
int main()
{n=read();for (int i=1;i<=n;i++) a[i]=read();/*for (int i=1;i<=n;i++)if (a[i]==0) delta[i]=2;else delta[i]=a[i]&1;for (int i=1;i<=n;i++) g[i][0]=g[i-1][0]+delta[i],s[i]=s[i-1]+a[i];ll u=0;for (int i=1;i<=n;i++){u=min(u,s[i]-g[i][0]);f[i][0]=g[i][0]+u;}for (int i=n;i>=1;i--) g[i][1]=g[i+1][1]+delta[i],s[i]=s[i+1]+a[i];u=0;for (int i=n;i>=1;i--){u=min(u,s[i]-g[i][1]);f[i][1]=g[i][1]+u;}for (int i=1;i<=n;i++) ans+=a[i];u=0;for (int i=1;i<=n;i++) ans=min(ans,f[i][1]+s[i-1]);for (int i=1;i<=n;i++) h[i]=h[i-1]+(a[i]&1^1);for (int i=1;i<=n+1;i++){ans=min(ans,f[i][1]+u+h[i-1]);u=min(u,f[i][0]-h[i]);}*/for (int i=1;i<=n;i++){f[i][0]=f[i-1][0];for (int j=1;j<=4;j++)f[i][j]=min(f[i][j-1],f[i-1][j]);f[i][0]+=a[i],f[i][4]+=a[i];f[i][1]+=a[i]==0?2:(a[i]&1);f[i][3]+=a[i]==0?2:(a[i]&1);f[i][2]+=a[i]&1^1;}ll ans=f[n][0];for (int i=1;i<=4;i++) ans=min(ans,f[n][i]);cout<<ans;return 0;
}

  F:大胆猜想序列合法当且仅当序列前i个位置的红球个数<=前i个人的红球个数,序列前i个位置的蓝球个数<=前i个人的蓝球个数,然后就是个思博dp了。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 2010
#define P 998244353
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
int n,a[N],u,v,s[N][2],f[N<<1][N<<1];
char S[N];
void inc(int &x,int y){x+=y;if (x>=P) x-=P;}
int main()
{scanf("%s",S+1);n=strlen(S+1);for (int i=1;i<=n;i++) a[i]=S[i]-'0';for (int i=1;i<=n;i++) u+=2-a[i],v+=a[i];for (int i=1;i<=n;i++) s[i][0]=s[i-1][0]+2-a[i],s[i][1]=s[i-1][1]+a[i];f[0][0]=1;for (int i=0;i<=u;i++)for (int j=0;j<=v;j++)if (i|j){if (s[min(n,i+j)][0]>=i&&s[min(n,i+j)][1]>=j){if (i) inc(f[i][j],f[i-1][j]);if (j) inc(f[i][j],f[i][j-1]);}}cout<<f[u][v];return 0;
}

  result:rank 207 rating +38 莫名其妙上黄了但非常不爽啊。

E:当行集合确定后,只要这些行的异或不为0,列的选择方案就有2^(m-1)种(似乎是一个在玛里苟斯中出现过的结论)。子集异或和为0容易想到线性基(高斯消元),同时注意到交换/异或两行不会改变答案,于是高斯消元后得到矩阵的秩,答案就显然了。

转载于:https://www.cnblogs.com/Gloid/p/10358542.html

Yahoo Programming Contest 2019 自闭记相关推荐

  1. Yahoo Programming Contest 2019 F - Pass

    传送门 题目大意 给定一个只包含012序列,0表示这个人有2个红球,1表示一个红球一个蓝球,2表示两个蓝球.进行n*2次游戏,每次游戏所有有球的人选择一个球递给前一个人,第一个人把球放到一个序列中,' ...

  2. Atcoder Yahoo Programming Contest 2019 简要题解

    A-C 直接放代码吧. A int n,k; int main() {n=read();k=read();puts(k<=(n+1)/2?"YES":"NO&quo ...

  3. Yahoo Programming Contest 2019 E - Odd Subrectangles

    E - Odd Subrectangles 链接 题意: n*m的01矩阵,选出一些行和一些列,计算多少个选的方式,使得相交的点的权值和,是奇数,n,m<=300. 分析: 考虑选出了行,有多少 ...

  4. Yahoo Programming Contest 2019 D - Ears

    D - Ears 思路: s:起点           t:终点           l:左端点           r:右端点 以上称为关键点 dp[i][j]表示到位置 i 为止,已经经过前 j ...

  5. Yahoo Programming Contest 2019 D-Ears

    传送门 题目大意 分析 我们不难整个线段可以被划分为5段 我们设路径到达的最左的地方是L,最右的地方是R 则这五段分别是0~L,L+1~S,S+1~T,T+1~R,R+1~N 最外面的两端不经过,所以 ...

  6. Yahoo Programming Contest 2019.D.Ears(DP)

    题目链接 菜爆了啊QAQ 记起点为\(S\),终点为\(T\),走过的最靠左的点是\(L\),最靠右的点是\(R\). 那么坐标轴被分成了五段: \(0\sim L-1\):经过\(0\)次: \(L ...

  7. NIKKEI Programming Contest 2019 翻车记

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

  8. AtCoder Grand Contest 030 自闭记

    A:阅读. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...

  9. The 10th Shandong Provincial Collegiate Programming Contest 2019山东省赛游记+解题报告

    比赛结束了几天...这篇博客其实比完就想写了...但是想等补完可做题顺便po上题解... 5.10晚的动车到了济南,没带外套有点凉.酒店还不错. 5.11早上去报道,济南大学好大啊...感觉走了一个世 ...

最新文章

  1. 油价新年首涨:“五连跌”终结 一箱油多花4元
  2. 讲述华为发布鸿蒙系统,华为鸿蒙系统正式版首批升级名单公布:这8款机型用户有福了!...
  3. new JSONArray(ListMap).tostring()问题
  4. 第十八节:跨域请求的解决方案和WebApi特有的处理方式
  5. PIE SDK矢量数据空间索引的创建
  6. MySQL优化详解(四)——MySQL缓存设置
  7. Maven Gradle 区别
  8. sybase如何配置monitor
  9. PHP_变量什么情况下加大括号{}
  10. (转)驱动开发之五 --- TDI之八 【译文】
  11. Python数据处理及分析详解
  12. 关于python中的三个点【...】
  13. Tensorflow Serving初体验
  14. python中main.py是什么意思_Python的__main__.py用法
  15. MATLAB 汉化补丁下载
  16. python 3.X 没有cPickle
  17. ACM实验室成员博客汇总
  18. greenDao小坑一个
  19. 紧随大厂脚步入局海外3A,米哈游造出下一个“原神”难?
  20. options should NOT have additional properties

热门文章

  1. LINQ学习——JOIN
  2. 数据的表示方法和运算方法
  3. 随机生成彩票的shell脚本
  4. 首个面向手绘草图的深度自监督表示学习
  5. ECCV18|这篇论文开源的车牌识别系统打败了目前最先进的商业软件(附Github地址)...
  6. 计算机等级考试二级Python讲座(二)
  7. 学术前沿 | DeepMind最新成果:图表示学习算法推理~46页ppt
  8. Github | 微软-计算机视觉最佳实践、代码示例和相关文档
  9. linux 安卓git,在Linux系统上安装Git
  10. strlen函数实现