A:签到。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. #define ll long long
  9. int gcd(int n,int m){return m==?n:gcd(m,n%m);}
  10. int read()
  11. {
  12. int x=,f=;char c=getchar();
  13. while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
  14. while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
  15. return x*f;
  16. }
  17. int a[];
  18. int main()
  19. {
  20. //freopen("a.in","r",stdin);
  21. //freopen("a.out","w",stdout);
  22. for (int i=;i<;i++) a[i]=read();
  23. sort(a,a+);
  24. if (a[]==&&a[]==&&a[]==&&a[]==) cout<<"YES";
  25. else cout<<"NO";
  26. }

  B:签到*2。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. #define ll long long
  9. int gcd(int n,int m){return m==?n:gcd(m,n%m);}
  10. int read()
  11. {
  12. int x=,f=;char c=getchar();
  13. while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
  14. while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
  15. return x*f;
  16. }
  17. char s[];
  18. int n;
  19. int main()
  20. {
  21. //freopen("a.in","r",stdin);
  22. //freopen("a.out","w",stdout);
  23. scanf("%s",s);n=strlen(s);
  24. char a[]="keyence";
  25. if (n<) cout<<"NO";
  26. else
  27. {
  28. int x=,y=;
  29. for (int i=;i<;i++) if (s[i]==a[i]) x++;else break;
  30. for (int i=n-;i>n-;i--) if (s[i]==a[-(n-i)]) y++;else break;
  31. if (x+y>=) cout<<"YES";
  32. else cout<<"NO";
  33. }
  34. }

  C:按ai-bi从小到大排序,依次将剩余最多的分配给需求最大的即可。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. #define ll long long
  9. #define N 100010
  10. int gcd(int n,int m){return m==?n:gcd(m,n%m);}
  11. int read()
  12. {
  13. int x=,f=;char c=getchar();
  14. while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
  15. while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
  16. return x*f;
  17. }
  18. int n,c[N];
  19. ll ans;
  20. struct data
  21. {
  22. int x,y;
  23. bool operator <(const data&a) const
  24. {
  25. return x-y<a.x-a.y;
  26. }
  27. }a[N];
  28. int main()
  29. {
  30. //freopen("a.in","r",stdin);
  31. //freopen("a.out","w",stdout);
  32. n=read();
  33. for (int i=;i<=n;i++) a[i].x=read();
  34. for (int i=;i<=n;i++) a[i].y=read();
  35. sort(a+,a+n+);
  36. for (int i=;i<=n;i++) c[i]=a[i].x;
  37. for (int i=;i<=n;i++) ans+=a[i].x-a[i].y;
  38. if (ans<) {cout<<-;return ;}
  39. int x=n,ans=;
  40. for (int i=;i<=n;i++)
  41. {
  42. if (a[i].x>=a[i].y) break;
  43. while (a[i].y-a[i].x>a[x].x-a[x].y)
  44. {
  45. a[i].x+=a[x].x-a[x].y;
  46. a[x].x=a[x].y;
  47. x--;
  48. }
  49. a[x].x-=a[i].y-a[i].x,a[i].x=a[i].y;
  50. }
  51. for (int i=;i<=n;i++) if (c[i]!=a[i].x) ans++;
  52. cout<<ans;
  53. }

  D:按数从大到小考虑,如果其作为某行最大值出现就会多一行被占领,列同理。记录当前被占领的行和列的数量,每次考虑填当前数的方案数,根据其是否在行列最大值中出现,分类讨论一下,给答案乘上这个方案数即可。这个弱智的不行的讨论写了我一年。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. #define ll long long
  9. #define N 1010
  10. #define P 1000000007
  11. int gcd(int n,int m){return m==?n:gcd(m,n%m);}
  12. int read()
  13. {
  14. int x=,f=;char c=getchar();
  15. while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
  16. while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
  17. return x*f;
  18. }
  19. int n,m,a[N],b[N],posa[N*N],posb[N*N],ans;
  20. int row,line;
  21. int main()
  22. {
  23. //freopen("a.in","r",stdin);
  24. //freopen("a.out","w",stdout);
  25. n=read(),m=read();
  26. for (int i=;i<=n;i++)
  27. {
  28. a[i]=read();
  29. if (posa[a[i]]) {cout<<;return ;}
  30. posa[a[i]]=i;
  31. }
  32. for (int i=;i<=m;i++)
  33. {
  34. b[i]=read();
  35. if (posb[b[i]]) {cout<<;return ;}
  36. posb[b[i]]=i;
  37. }
  38. row=,line=;ans=;
  39. for (int i=n*m;i>=;i--)
  40. {
  41. if (posa[i]&&posb[i]) {row++,line++;continue;}
  42. if (!posa[i]&&!posb[i])
  43. {
  44. if (row*line-(n*m-i)<=) {cout<<;return ;}
  45. ans=1ll*ans*(row*line-(n*m-i))%P;
  46. }
  47. if (posa[i]) ans=1ll*ans*line%P,row++;
  48. if (posb[i]) ans=1ll*ans*row%P,line++;
  49. }
  50. cout<<ans;
  51. }

  result:rank 241 rating +19

  E:分治,每次考虑跨越中点的边,此时可以将边权中的绝对值分配到点权上。找到两边各自点权最小的点i0,、j0,将所有包含这两点之一且跨越中点的边加进图中,最后跑kruskal即可。因为考虑边(i,j),其边权一定大于(i0,j)和(i,j0),众所周知环上的最大边不可能出现在MST中。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. #define ll long long
  9. #define N 200010
  10. char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
  11. int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
  12. int read()
  13. {
  14. int x=0,f=1;char c=getchar();
  15. while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
  16. while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
  17. return x*f;
  18. }
  19. int n,d,a[N],fa[N],t;
  20. ll ans;
  21. struct data
  22. {
  23. int x,y;ll z;
  24. bool operator <(const data&a) const
  25. {
  26. return z<a.z;
  27. }
  28. }e[N<<5];
  29. int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
  30. ll calcl(int i)
  31. {
  32. return a[i]-1ll*i*d;
  33. }
  34. ll calcr(int i)
  35. {
  36. return a[i]+1ll*i*d;
  37. }
  38. void solve(int l,int r)
  39. {
  40. if (l==r) return;
  41. int mid=l+r>>1;
  42. solve(l,mid);
  43. solve(mid+1,r);
  44. int L=l;
  45. for (int i=l;i<=mid;i++) if (calcl(i)<calcl(L)) L=i;
  46. int R=r;
  47. for (int i=mid+1;i<=r;i++) if (calcr(i)<calcr(R)) R=i;
  48. for (int i=l;i<=mid;i++) e[++t]=(data){i,R,calcl(i)+calcr(R)};
  49. for (int i=mid+1;i<=r;i++) e[++t]=(data){L,i,calcl(L)+calcr(i)};
  50. }
  51. signed main()
  52. {
  53. freopen("e.in","r",stdin);
  54. freopen("e.out","w",stdout);
  55. n=read(),d=read();
  56. for (int i=1;i<=n;i++) a[i]=read();
  57. solve(1,n);
  58. for (int i=1;i<=n;i++) fa[i]=i;
  59. sort(e+1,e+t+1);
  60. for (int i=1;i<=t;i++)
  61. if (find(e[i].x)!=find(e[i].y))
  62. {
  63. fa[find(e[i].x)]=find(e[i].y);
  64. ans+=e[i].z;
  65. }
  66. cout<<ans;
  67. return 0;
  68. //NOTICE LONG LONG!!!!!
  69. }

  另一种做法是直接用线段树维护prim的过程。发现早就忘了prim是啥了。

  F:正常的想法是计算第i次切割的贡献,但似乎很难低于n2

  换一种思路,考虑计算以点(i,j)为左下角的矩形的贡献。这个矩形在选择第i行和第j列切割后出现,出现时贡献为1,出现后每切一刀贡献+1。不妨先考虑i,j>0的情况。

  为了便于考虑,改为计算该矩形贡献的期望。

  矩形首次出现产生的贡献显然就是i行j列都在前k次切割中出现的概率,这个概率显然为C(k,2)/C(n+m,2),即一共有C(n+m,2)对,该对在其中等概率出现。

  对于出现后的贡献,考虑是切x时产生的贡献,这相当于是i,j,x都在前k次中出现,且x在i和j之后出现,那么概率是1/3*C(k,3)/C(n+m,3)。x有n+m-2种取值,所以再乘上n+m-2。

  i=0或j=0的情况类似。当然求的是期望最后别忘了换成总贡献。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. #define ll long long
  9. #define N 20000010
  10. #define P 1000000007
  11. char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
  12. int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
  13. int read()
  14. {
  15. int x=0,f=1;char c=getchar();
  16. while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
  17. while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
  18. return x*f;
  19. }
  20. int n,m,k,fac[N],inv[N],ans;
  21. int C(int n,int m){if (m>n) return 0;return 1ll*fac[n]*inv[m]%P*inv[n-m]%P;}
  22. int invC(int n,int m){if (m>n) return 0;return 1ll*inv[n]*fac[m]%P*fac[n-m]%P;}
  23. signed main()
  24. {
  25. n=read(),m=read(),k=read();
  26. fac[0]=1;for (int i=1;i<=n+m;i++) fac[i]=1ll*fac[i-1]*i%P;
  27. inv[0]=inv[1]=1;for (int i=2;i<=n+m;i++) inv[i]=P-1ll*(P/i)*inv[P%i]%P;
  28. for (int i=2;i<=n+m;i++) inv[i]=1ll*inv[i-1]*inv[i]%P;
  29. ans=1ll*C(k,2)*invC(n+m,2)%P;
  30. ans=(ans+1ll*invC(3,1)*C(k,3)%P*invC(n+m,3)%P*(n+m-2))%P;
  31. ans=1ll*ans*n%P*m%P;
  32. int ans1=0;
  33. ans1=1ll*C(k,1)*invC(n+m,1)%P;
  34. ans1=(ans1+1ll*invC(2,1)*C(k,2)%P*invC(n+m,2)%P*(n+m-1))%P;
  35. ans1=1ll*ans1*(n+m)%P;
  36. ans=(ans+ans1+k)%P;
  37. cout<<1ll*ans*C(n+m,k)%P*fac[k]%P;
  38. return 0;
  39. //NOTICE LONG LONG!!!!!
  40. }

  

KEYENCE Programming Contest 2019 自闭记的更多相关文章

  1. Yahoo Programming Contest 2019 自闭记

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

  2. diverta 2019 Programming Contest 2自闭记

    A 签到(a-b problem不用贴了吧,以后atcoder小于300分题均不贴代码) B 发现选择的p,q一定是其中两点间的距离,于是可以O(n2)枚举两点,再O(n2)判断,其实可以做到O(n3 ...

  3. 【AtCoder】KEYENCE Programming Contest 2019

    A - Beginning 这个年份恐怕需要+2 #include <bits/stdc++.h> #define fi first #define se second #define p ...

  4. KEYENCE Programming Contest 2019 Solution

    A - Beginning 签到. #include <bits/stdc++.h> using namespace std; int main() { ]; while (scanf(& ...

  5. PKUWC 2019 自闭记

    PKUWC 2019 自闭记 Day -1 考前天天在隔壁的物竞教室划水(雀魂,能和吉老师一起玩的游戏都是好游戏),没有做题. Day 0 早上8:16的高铁,到广州南居然要6个小时...不知道福州和 ...

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

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

  7. [AtCoder] Yahoo Programming Contest 2019

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

  8. NIKKEI Programming Contest 2019 翻车记

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

  9. AISing Programming Contest 2019 翻车记

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

随机推荐

  1. 完整卸载 kUbuntu-desktop from Ubuntu 14.04 LTS系统 ubuntu14.04 LTS 64Bit

    sudo apt-get remove libkde3support4 k3b-data ntrack-module-libnl-0 libkrosscore4 libgpgme++2 libqapt ...

  2. P4111 [HEOI2015]小Z的房间

    你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着.你想要打通一些相邻房间的墙,使得所有房间能够互相到达.在此过程中,你不能把 ...

  3. ftp 传输数据:命令链路连接方法是一样的,而数据链路的建立方法就完全不同

    0.FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式. PORT(主动)连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链 ...

  4. VS2017上执行VS2013项目错误MSB802之解决方案

    进行想把我编写的数字图像处理软件MagicHouse更新到最新的VS2017开发环境下,原来的开发环境是VS2013.但是用VS2017打开项目并编译时,系统报错误MSB802,如下图所示. 其实Vi ...

  5. React-使用imutable.js来管理store中的数据

    reducer.js中store的数据是不能改变的,用原始的方法要手动的保证store不被修改,存在风险.imutable.js可以生成一个不可改变的对象,可以避免掉自己不小心修改掉store的情况. ...

  6. HTML 图片轮播制作工具

    下载地址:http://wowslider.com/download/wowslider-win-setup.zip?utm_source=free_downl_win&utm_medium= ...

  7. redis 配置 架构 基础

    redis 官网  redis.io   io为某国家域名后缀 有redis各种版本. java 版本 又分各种工具 clients 下 RedisClient为图形化管理界面 Jedis 才是jav ...

  8. C# 随机生成姓名的方法

    没什么好说的,因为用的上,所以作此记录: 代码如下: public class indexModel { private object O = new object(); public List< ...

  9. 绍一集训Round#2

    Preface 感觉这次的题目是真的太水了,可能是为了让我们涨一波信心的吧. 不过最后一题没有想到那种玄学做法还是太菜了,还是要一波姿势的啊. 交换 一道入门难度题,根据排序不等式(又或是简单推导可以 ...

  10. [Spark][Python]Spark Join 小例子

    [training@localhost ~]$ hdfs dfs -cat people.json {"name":"Alice","pcode&qu ...