传送门

\(A\)

咕咕

int x,y;
int c[4]={0,300000,200000,100000};
int res;
int main(){
cin>>x>>y;
if(x<=3)res+=c[x];
if(y<=3)res+=c[y];
if(x==1&&y==1)res+=4e5;
cout<<res<<endl;
return 0;
}

\(B\)

咕咕

const int N=2e5+5;
typedef long long ll;
int a[N],n;ll sum[N],suf[N],res;
int main(){
scanf("%d",&n);
fp(i,1,n)scanf("%d",&a[i]),sum[i]=suf[i]=a[i];
fp(i,1,n)sum[i]+=sum[i-1];fd(i,n,1)suf[i]+=suf[i+1];
res=1e18;
fp(i,1,n-1)cmin(res,abs(sum[i]-suf[i+1]));
printf("%lld\n",res);
return 0;
}

\(C\)

一道思博题想了这么久看来脑子已经没用了

如果每行都有草莓那么每行分别考虑,对于没有草莓的行缩起来就行了

//quming
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
using namespace std;
const int N=305;
char mp[N][N];int col[N][N],n,m,cnt,K;
int main(){
scanf("%d%d%d",&n,&m,&K);
fp(i,1,n)scanf("%s",mp[i]+1);
fp(i,1,n)fp(j,1,m)if(mp[i][j]=='#'){
col[i][j]=++cnt;
for(R int k=j-1;k&&!col[i][k]&&mp[i][k]!='#';--k)col[i][k]=cnt;
for(R int k=j+1;k<=m&&!col[i][k]&&mp[i][k]!='#';++k)col[i][k]=cnt;
}
fp(i,1,n)fp(j,1,m)if(col[i][j]){
for(R int k=i-1;k&&!col[k][j];--k)col[k][j]=col[i][j];
for(R int k=i+1;k<=n&&!col[k][j];++k)col[k][j]=col[i][j];
}
fp(i,1,n)fp(j,1,m)printf("%d%c",col[i][j]," \n"[j==m]);
return 0;
}

\(D\)

傻了,什么神仙题

我们发现一次操作要么使总位数减1总和不变,要么使总和减9总位数不变,而最终的情况一定是位数为1总和小于等于9,记总位数为d,总和为s,答案就是\(d-1+(s-1)/9\)

const int N=2e5+5;
typedef long long ll;
int d[N],n;ll c[N],res,sum;
int main(){
scanf("%d",&n);
fp(i,1,n)scanf("%d%lld",&d[i],&c[i]),sum+=c[i],res+=d[i]*c[i];
printf("%lld\n",(res-1)/9+sum-1);
return 0;
}

\(E\)

我们记\(d(i)=query(i,i+n-1)\),如果存在某个\(d(i)\neq d(i+1)\),那么显然\(i\)和\(i+n\)的颜色就可以知道了,同时\((i+1,i+n-1)\)这个区间中一定是红蓝次数各一半,我们可以用它去check出其他所有颜色

所以问题是怎么找到这个分界点,它实际上是可以二分的,我们初始时记\(l=1,r=n+1\),那么\(d(l)\neq d(r)\)显然成立,我们每一次判断\(mid\),如果\(d(mid)=d(l)\)则令\(l=mid\),否则令\(r=mid\),这样一直二分到\(r-l=1\)即可

//quming
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
using namespace std;
const int N=505;
char s[5];int a[N],col[N],bs[N],cnt[2],n,las,now,ql,qr,l,r,mid,ans;
inline int ask(R int l,R int r){
putchar('?'),putchar(' ');
fp(i,l,r)printf("%d ",i);
putchar('\n'),fflush(stdout);
scanf("%s",s+1);return s[1]=='R';
}
inline int ask(R int l,R int r,R int x,R int d){
putchar('?'),putchar(' ');
fp(i,l,r)if(i!=x)printf("%d ",i);
if(d)printf("%d ",x);
putchar('\n'),fflush(stdout);
scanf("%s",s+1);
if(s[1]=='-')while(true);
return s[1]=='R';
}
int main(){
// freopen("testdata.in","r",stdin);
scanf("%d",&n);
fp(i,1,n<<1)col[i]=-1;
l=1,r=n+1,ans=0,bs[1]=ask(1,n),bs[n+1]=bs[1]^1;
while(r-l>1){
mid=(l+r)>>1,bs[mid]=ask(mid,mid+n-1);
bs[mid]==bs[l]?l=mid:r=mid;
}
col[l]=bs[l],col[r+n-1]=bs[r];
ql=r,qr=r+n-2;
fp(i,ql,qr)col[i]=ask(ql-1,qr+1,i,0)^1;
fp(i,1,ql-2)col[i]=ask(ql,qr,i,1);
fp(i,qr+2,n<<1)col[i]=ask(ql,qr,i,1);
putchar('!'),putchar(' ');
fp(i,1,n<<1)putchar(col[i]?'R':'B');
putchar('\n'),fflush(stdout);
return 0;
}

\(F\)

首先,可以发现如果一个状态转移一次之后每个格子都有一个机器人,那么这个状态肯定是合法的

如果一直往下走,那么循环节就是\(g={n\over \gcd(n,T)}\),往右走循环节是\(h={m\over \gcd(m,T)}\),那么这个\(g\times h\)的子矩形只会受自己内部影响,和外面无关,所以我们可以对于每个这样的子矩形单独考虑

这样我们可以把问题转化为一个\(g\times h\)的子矩形且\(T=1\),我们考虑合法的方案,一种是存在某个格子不走,那么整个矩形全都不走,一种是分别考虑每行,要么不走要么全往右,一种是每列都是全往下,这个直接组合数算一下,全都不走的情况也会在后两种里被算到,要去掉

还有一种情况是既往右又往下,假设我们先固定\((1,1)\)为右,那么\((1,2)\)就不能被\((n,2)\)走到了,所以\((n,2)\)也必然是右,以此类推我们可以确定\({h\times g\over \gcd(h,g)}\)个格子,那么对于所有\(\gcd(h,g)\)个格子每个都有两种方案,直接算一下就好了,记得把全往右和全往下的情况也去掉

//quming
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
using namespace std;
typedef long long ll;
const int P=1e9+7;
inline void upd(R int &x,R int y){(x+=y)>=P?x-=P:0;}
inline int inc(R int x,R int y){return x+y>=P?x+y-P:x+y;}
inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}
inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}
int ksm(R int x,R ll y){
R int res=1;
for(;y;y>>=1,x=mul(x,x))(y&1)?res=mul(res,x):0;
return res;
}
int n,m,T,res,h,g;
int main(){
scanf("%d%d%d",&n,&m,&T);
h=n/__gcd(n,T),g=m/__gcd(m,T);
// printf("%d %d\n",h,g);
res=((0ll+1+ksm(2,h)-1+ksm(2,g)-1+ksm(2,__gcd(h,g))-2)%P+P)%P;
res=ksm(res,1ll*(n/h)*(m/g));
printf("%d\n",res);
return 0;
}

DISCO Presents Discovery Channel Code Contest 2020 Qual题解的更多相关文章

  1. DISCO Presents Discovery Channel Code Contest 2020 Qual Task E. Majority of Balls

    Not able to solve this problem during the contest (virtual participation). The first observation is ...

  2. IOCCC(The International Obfuscated C Code Contest)

    国际 C 语言混乱代码大赛(IOCCC, The International Obfuscated C Code Contest)是一项国际编程赛事,从 1984 年开始,每年举办一次(1997年.1 ...

  3. 【AtCoder】CODE FESTIVAL 2016 qual A

    CODE FESTIVAL 2016 qual A A - CODEFESTIVAL 2016 -- #include <bits/stdc++.h> #define fi first # ...

  4. 【AtCoder】CODE FESTIVAL 2016 qual B

    CODE FESTIVAL 2016 qual B A - Signboard -- #include <bits/stdc++.h> #define fi first #define s ...

  5. 【AtCoder】CODE FESTIVAL 2016 qual C

    CODE FESTIVAL 2016 qual C A - CF -- #include <bits/stdc++.h> #define fi first #define se secon ...

  6. CODE FESTIVAL 2017 qual B B - Problem Set【水题,stl map】

    CODE FESTIVAL 2017 qual B B - Problem Set 确实水题,但当时没想到map,用sort后逐个比较解决的,感觉麻烦些,虽然效率高很多.map确实好写点. 用map: ...

  7. CODE FESTIVAL 2017 qual B C - 3 Steps【二分图】

    CODE FESTIVAL 2017 qual B C - 3 Steps 题意:给定一个n个结点m条边的无向图,若两点间走三步可以到,那么两点间可以直接连一条边,已经有边的不能连,问一共最多能连多少 ...

  8. M-SOLUTIONS Programming Contest 2020 题解

    M-SOLUTIONS Programming Contest 2020 题解 目录 M-SOLUTIONS Programming Contest 2020 题解 A - Kyu in AtCode ...

  9. Comet OJ - Contest #2 简要题解

    Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...

随机推荐

  1. C语言----流程图(基础篇四)

    大家晚上好,最近忙每天忙于项目没有时间更新自己的博客,时间就是海绵嘛硬挤挤就是有的,咂看标题" 流程图 ",编程界的一个不可或缺的技能,特别是在做复杂的逻辑的时候要处理好每一步的关 ...

  2. Pika 连接 rabbitmq 集群

    原文:https://blog.csdn.net/Tech_Salon/article/details/82890431 使用 Pika 连接 rabbitmq 集群使用 python 编程经常会用到 ...

  3. Mybatis 原理分析

    对于入门程序的流程分析 使用过程 读配置文件 读取配置文件时绝对路径和相对路径(web工程部署后没有src路径)都有一定问题,实际开发中一般有两种方法 使用类加载器,它只能读取类路径的配置文件 使用S ...

  4. IDEA 环境下更改Maven的仓库镜像提高下载速度

    Maven把所有常用的jar包存放在一个集中的仓库(repository)中,项目需要什么jar包和他相关的依赖,只要在pom.xml文件中声明就可了,还是很方便的.repository分两种,一个是 ...

  5. [摘录]flutter打包后无法访问接口

    打开文件{{flutterPorject}}\android\app\src\main\AndroidManifest.xml这个文件增加权限信息: <uses-permission andro ...

  6. CENTOS7-JAVA模拟CPU占用高及排查( 转)

    环境 centos7 1核2GB Java8 模拟cpu占用高 新建一个名为jvm-learn的springboot项目 模拟代码如下 import org.springframework.boot. ...

  7. Promise介绍及使用场景

    Promise 介绍 Promise 是一个构造函数,是异步编程的一种解决方案.所谓Promse,它本身就是一个容器,里面保存着异步操作的结果,对的,这和回调函数类似. Promise 容器本身不是异 ...

  8. Beego 学习笔记13:Api编写

    Api编写 1>     api常用的数据的格式有json和xml这两种. 2>     下面开始讲解不同的数据格式使用的方式 1->JSON 数据直接输出. 调用 ServeJSO ...

  9. consul:健康检查

    官方文档:https://www.consul.io/docs/agent/checks.html consul提供的健康检查有以下几种: 1.script+interval 2.http+inter ...

  10. Apache Kafka是数据库吗?

    最近思路有些枯竭,找些务虚的话题来凑.本文内容完全来自于Martin Kelppmann在2019年Kafka伦敦峰会上的演讲.顺便提一句,Kelppmann是<Designing Data-I ...