AtCoder Grand Contest 017
noi前橙名计划失败。全程搞C而gg……
A - Biscuits
题意:背包,求价值为奇/偶的方案数。
- #include<cstdio>
- #include<queue>
- #include<algorithm>
- #define ld long double
- #define MN 21000000
- using namespace std;
- int read_p,read_ca;
- inline int read(){
- read_p=;read_ca=getchar();
- while(read_ca<''||read_ca>'') read_ca=getchar();
- while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
- return read_p;
- }
- int n,p,a;
- long long mmh[];
- int main(){
- mmh[]=;
- n=read();p=read();
- while(n--){
- a=read()&;
- if (a&){
- mmh[]=mmh[]=mmh[]+mmh[];
- }else mmh[]<<=,mmh[]<<=;
- }
- printf("%lld\n",mmh[p]);
- }
B - Moderate Differences
题意:询问是否可以把B-A表示成n-1个绝对值在C和D之间的数的和。
- #include<cstdio>
- #include<queue>
- #include<algorithm>
- #define ld long double
- #define MN 21000000
- using namespace std;
- int read_p,read_ca;
- inline int read(){
- read_p=;read_ca=getchar();
- while(read_ca<''||read_ca>'') read_ca=getchar();
- while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
- return read_p;
- }
- long long n,a,b,c,d,w;
- int main(){
- scanf("%lld%lld%lld%lld%lld",&n,&a,&b,&c,&d);
- b-=a;n--;
- for (int i=;i<=n;i++){
- w=-d*i+c*(n-i);
- if (b-w<=(d-c)*n&&b>=w) return /*printf("%d %lld %lld %lld\n",i,w,n,b-w),*/puts("YES"),;
- }
- puts("NO");
- }
C - Snuke and Spells
题意:定义一种操作为当序列长度为k时把所有等于k的元素删去,问将给定序列至少修改多少元素,序列能进行不断操作后为空。
题解:有一个结论:如果等于 $i$ 的数有$N_{i}$个,那么看成区间$[i-N_{i}+1,i]$,未被区间覆盖的位置数量即为答案。
- #include<cstdio>
- #include<algorithm>
- #define MN 210000
- using namespace std;
- int n,m,x,y,c[MN<<],t[MN],a[MN],mmh=;
- int main(){
- scanf("%d%d",&n,&m);
- for (int i=;i<=n;i++){
- scanf("%d",&a[i]);
- if (a[i]-t[a[i]]>) mmh+=(c[a[i]-t[a[i]]]++)==;
- t[a[i]]++;
- }
- while (m--){
- scanf("%d%d",&x,&y);
- t[a[x]]--;
- if (a[x]-t[a[x]]>)mmh-=(--c[a[x]-t[a[x]]])==;
- a[x]=y;
- if (a[x]-t[a[x]]>)mmh+=(c[a[x]-t[a[x]]]++)==;
- t[a[x]]++;
- printf("%d\n",n-mmh);
- }
- }
D - Game on Tree
题意:裸删边游戏。
题解:大佬论文
- #include<cstdio>
- #include<queue>
- #include<algorithm>
- #define ld long double
- #define MN 210000
- using namespace std;
- int read_p,read_ca;
- inline int read(){
- read_p=;read_ca=getchar();
- while(read_ca<''||read_ca>'') read_ca=getchar();
- while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
- return read_p;
- }
- struct na{int y,ne;}b[MN];
- int n,m,l[MN],num=,x,y,s[MN];
- inline void in(int x,int y){
- b[++num].y=y;b[num].ne=l[x];l[x]=num;
- }
- void dfs(int x,int f){
- int u=;s[x]=;
- for (int i=l[x];i;i=b[i].ne)
- if (b[i].y!=f){
- dfs(b[i].y,x);u^=s[b[i].y]+;
- }
- s[x]=u;
- /*for (int i=l[x];i;i=b[i].ne)
- if (b[i].y!=f){
- if ((u^s[b[i].y])==0) s[x]=1;
- }*/
- //printf("%d %d\n",x,s[x]);
- }
- int main(){
- n=read();
- for (int i=;i<n;i++) x=read(),y=read(),in(x,y),in(y,x);
- dfs(,);
- puts(s[]?"Alice":"Bob");
- }
E - Jigsaw
题意:问能否把拼图排成一排使得相邻拼图契合。
题解:把拼图看成边,其两段信息作为点连边然后并查集。
- #include<cstdio>
- #include<algorithm>
- #define NO return puts("NO"),0
- using namespace std;
- int n,m,f[],a,b,c,d,x,y,D[],bo[],C[];
- int gf(int x){return x==f[x]?x:f[x]=gf(f[x]);}
- int main(){
- scanf("%d%d",&n,&m);
- for (int i=;i<;i++) f[i]=i;
- while (n--){
- scanf("%d%d%d%d",&a,&b,&c,&d);
- if (c==) x=a;else x=-c;x+=;
- if (d==) y=-b;else y=d;y+=;
- f[gf(x)]=gf(y);
- D[x]++;D[y]--;bo[x]=;
- }
- for (int i=;i<;i++) if (D[i]>) NO;
- for (int i=;i<;i++) if (D[i]<) NO;
- for (int i=;i<;i++)
- if (bo[gf(i)]|=bo[i],D[i]) C[f[i]]=;
- for (int i=;i<;i++)
- if (f[i]==i&&!C[i]&&bo[i]) NO;
- puts("YES");
- }
F - Zigzag
题意:在$\frac{n*(n+1)}{2}$三角形上从顶到底画m条可重合,不可相交的线,某些线的部分已经确定,求方案数,、
题解:dp[i][j]表示考虑了前$i$条线,第$i$条线的位置状态为$j$的方案数。转移起来有点麻烦,窝看并抄了dalao的代码,实现得非常优雅,大约是从高往低考虑往左走的线可以向往右的线转移。
- #include<cstdio>
- #include<algorithm>
- #define MN 1000
- using namespace std;
- const int MOD=1e9+;
- int n,m,k,le[MN],ri[MN],x,y,z,mmh[<<],MMH=;
- inline void M(int &x){while(x>=MOD)x-=MOD;}
- int lowbit(int x) { return x & -x; }
- int main(){
- scanf("%d%d%d",&n,&m,&k);n--;
- for (int i=;i<=m;i++) le[i]=(<<n)-,ri[i]=;
- while(k--){
- scanf("%d%d%d",&x,&y,&z);y--;
- if (z==) le[x]^=<<y;else ri[x]^=<<y;
- }
- mmh[]=;
- for (int i=;i<=m;i++){
- for (int k=;k<n;k++)
- for (int j=;j<(<<n);j++) if (~j>>k&)
- M(mmh[j+(<<k)-lowbit(j&~((<<k)-))]+=mmh[j]);
- for (int j=;j<(<<n);j++)
- if (!((j&ri[i])==ri[i]&&(j&le[i])==j)) mmh[j]=;
- }
- for (int j=;j<(<<n);j++) M(MMH+=mmh[j]);
- printf("%d\n",MMH);
- }
AtCoder Grand Contest 017的更多相关文章
- AtCoder Grand Contest 017 F - Zigzag
题目传送门:https://agc017.contest.atcoder.jp/tasks/agc017_f 题目大意: 找出\(m\)个长度为\(n\)的二进制数,定义两个二进制数的大小关系如下:若 ...
- AtCoder Grand Contest 017 (VP)
contest link Official Editorial 比赛体验--之前做题的时候感觉 AtCoder 挺快的,现在打了VP之后发现还是会挂的--而且不是加载缓慢或者载不出来,直接给你一个无法 ...
- AtCoder Grand Contest 017 题解
A - Biscuits 题目: 给出 \(n\) 个物品,每个物品有一个权值. 问有多少种选取方式使得物品权值之和 \(\bmod\space 2\) 为 \(p\). \(n \leq 50\) ...
- AtCoder Grand Contest 017 迟到记
晚上去操场上浪. 回来以后看到好几个人开着 \(AtCoder\) 在打代码. ... ... 今天有 \(AtCoder\) 比赛 ? 管它呢, \(Kito\) 在切西瓜,先吃西瓜... 然后看 ...
- 题解——ATCoder AtCoder Grand Contest 017 B - Moderate Differences(数学,构造)
题面 B - Moderate Differences Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Stat ...
- AtCoder Grand Contest 017 B
B - Moderate Differences Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Stateme ...
- AtCoder Grand Contest 017 A
Problem Statement There are N bags of biscuits. The i-th bag contains Ai biscuits. Takaki will selec ...
- AtCoder Grand Contest 017题解
传送门 \(A\) 直接转移就是了 typedef long long ll; const int N=55; ll f[N][2];int a[N],n,p; int main(){ scanf(& ...
- AtCoder Grand Contest 012
AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...
随机推荐
- 【python】lambda创建匿名函数
- lua 实现tableToString
function tableToString(studentNum) local str = "{ " str = str.."\n" for k, v in ...
- 基于阿里云的MQTT远程控制
好久没有写博客了,眼看自己的项目就要快做完了,先分享一下基于MQTT的远程控制,自己买了一个阿里的云端,然后在云端上安装了一个MQTT服务器,其实是一不小心买了两个,所以准备贡献出来一个供大家使用, ...
- 2018年的UX设计师薪酬预测,你能拿多少?
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 一个经验丰富的设计师完全可以根据地区和专业来可以预期薪酬之间的差距,其中悬殊最高可达80K. 本 ...
- iOS学习——iOS常用的存储方式
不管是在iOS还是Android开发过程中,我们都经常性地需要存储一些状态和数据,比如用户对于App的相关设置.需要在本地缓存的数据等等.根据要存储的的数据的大小.存储性质以及存储类型,在iOS和An ...
- Prism for WPF再探(基于Prism事件的模块间通信)
上篇博文链接 Prism for WPF初探(构建简单的模块化开发框架) 一.简单介绍: 在上一篇博文中初步搭建了Prism框架的各个模块,但那只是搭建了一个空壳,里面的内容基本是空的,在这一篇我将实 ...
- windows 命令行打开浏览器
在命令行打开百度 start chrome www.baidu.com
- package-cleanup
package-cleanup 是一个python开发的命令程序,用来清除本机已安装的.重复的 或孤立的软件包. desktop版的CentOS镜像包含这个工具,而Minimal版的CentOS镜像不 ...
- [E::hts_idx_push] NO_COOR reads not in a single block at the end 10 -1
在分析转录组数据时,用bowtie2比对生成的bam文件,下一步call peak使用m6Aviewer,需要bam文件的index文件.所以我直接敲命令 samtools index xx.bam ...
- 关于python中的dir函数
dir函数用于查看python对象的属性,如果所查看的python对象已经定义了__dir__方法,则使用dir会返回定义的__dir__方法的返回值.如果没有定义__dir__方法,则会从__dic ...