传送门

\(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. ASP.NET Core中如何显示[PII is hidden]的隐藏信息

    有时候我们在ASP.NET Core项目运行时,发生在后台程序中的错误会将关键信息隐藏为[PII is hidden]这种占位符,如下所示: 而知道这些关键信息,有时候对我们调试程序是非常重要的.所以 ...

  2. 1、VUE介绍

    1.VUE简介 最近一段时间,Web前端领域出现了很多MVVM框架技术,如AngularJS.React,VUE.js等等. Vue.js借鉴了AngularJS的设计理念,也吸取了React和Ang ...

  3. IdentityServer4学习及简单使用

    本文,主要用来记录IdentityServer4的简单使用. 一. IdentityServer的预备知识 要学习IdentityServer,需要了解下基于Token的验证体系,其中涉及到Token ...

  4. jquery 获取后台实时数据

    第一步.提醒后台处理数据1.$.ajax({}) 提交数据,2.后台返回状态3.后台开始处理数据,并每秒记录状态到 data.json 文件4.前台每秒请求 data.json 文件,直到处理完成 第 ...

  5. Unity PhysicsScene测试

    应该是unity 2018.3中加入的功能,对象可以放置于不同的物理场景中. 一个Scene对应一个物理场景(PhysicsScene),若想放入独立的物理场景测试创建一个Scene即可.见下图gif ...

  6. 二.HTML

    1.HTML 1. <head></head>标签 <!DOCTYPE html> <!--统一规范--> <!----> <html ...

  7. Django---FORM组件.FORM组件的字段,FORM组件校验流程,FORM组件的全局和局部钩子,FORM和Model的组合

    Django---FORM组件.FORM组件的字段,FORM组件校验流程,FORM组件的全局和局部钩子,FORM和Model的组合 一丶FORM的介绍 1.生成页面可用的HTML标签 2.对用户提交的 ...

  8. 剑指前端(前端入门笔记系列)——DOM(元素节点)

    DOM(元素节点) 本文介绍了元素节点的基本操作:增删改查   增 新增一个元素节点分为两步(二者缺一不可),第一步:创建元素节点,第二步:将创建的元素节点插入到指定元素节点中(也就是插入指定元素节点 ...

  9. CSS 初识

    一.CSS 发展历程 从HTML被发明开始,样式就以各种形式存在.不同的浏览器结合它们各自的样式语言为用户提供页面效果的控制.最初的HTML只包含很少的显示属性. 随着HTML的成长,为了满足页面设计 ...

  10. Map去重,去重value相同的元素,保留key最小的那个值

    Map<Integer,String>,Integer代表时间撮,String代表文本信息去重函数:就是删除Map中value相同的元素,只保留key最小的那个元素 public stat ...