1.数组异或

  1. #include<iostream>
  2. #include<cstdio>
  3. #define maxn 100010
  4. #define mod 1000000007
  5. using namespace std;
  6. int n,a[maxn],b[maxn],c[maxn];
  7. int main(){
  8. freopen("xorarray.in","r",stdin);freopen("xorarray.out","w",stdout);
  9. scanf("%d",&n);
  10. for(int i=;i<=n;i++)scanf("%d",&a[i]);
  11. for(int i=;i<=n;i++)scanf("%d",&b[i]);
  12. c[]=a[]^b[];
  13. for(int i=;i<=n;i++){
  14. c[i]=c[i-];
  15. for(int j=;j<i;j++){
  16. c[i]+=a[i]^b[j];
  17. if(c[i]>=mod)c[i]-=mod;
  18. }
  19. for(int j=;j<i;j++){
  20. c[i]+=a[j]^b[i];
  21. if(c[i]>=mod)c[i]-=mod;
  22. }
  23. c[i]+=a[i]^b[i];
  24. if(c[i]>=mod)c[i]-=mod;
  25. }
  26. for(int i=;i<=n;i++)printf("%d ",c[i]);
  27. fclose(stdin);fclose(stdout);
  28. return ;
  29. }

60分 暴力

  1. /*
  2. 累计所有数二进制下的每一位0或1的个数
  3. 又因为是xor,所以a[j][0]*b[j][1]+a[j][1]*b[j][0]
  4. */
  5. #include<iostream>
  6. #include<cstdio>
  7. #define maxn 100010
  8. #define mod 1000000007
  9. using namespace std;
  10. int n,A[maxn],B[maxn];
  11. int a[][],b[][],C[maxn];
  12. int main(){
  13. //freopen("Cola.txt","r",stdin);
  14. freopen("xorarray.in","r",stdin);freopen("xorarray.out","w",stdout);
  15. scanf("%d",&n);
  16. for(int i=;i<=n;i++)scanf("%d",&A[i]);
  17. for(int i=;i<=n;i++)scanf("%d",&B[i]);
  18. for(int i=;i<=n;i++){
  19. for(int j=;j<=;j++){
  20. a[j][(A[i]>>j)&]++;
  21. b[j][(B[i]>>j)&]++;
  22. long long c=(1LL*a[j][]*b[j][]%mod+1LL*a[j][]*b[j][]%mod)%mod;
  23. c=c*(<<j)%mod;
  24. C[i]=(C[i]+c)%mod;
  25. }
  26. }
  27. for(int i=;i<=n;i++)printf("%d ",C[i]);
  28. return ;
  29. }

100分

2.侦探游戏(最小生成树,期望)

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<queue>
  4. #include<cstring>
  5. #define maxn 20010
  6. using namespace std;
  7. int n,m,num,head[maxn],dis[maxn],D[maxn];
  8. double ans,w;
  9. bool v[maxn];
  10. struct node{
  11. int to,pre,v;
  12. }e[*];
  13. void Insert(int from,int to,int v){
  14. e[++num].to=to;
  15. e[num].v=v;
  16. e[num].pre=head[from];
  17. head[from]=num;
  18. }
  19. void spfa(int s1,int s2){
  20. queue<int>q;
  21. memset(v,,sizeof(v));memset(dis,/,sizeof(dis));
  22. v[s1]=;v[s2]=;dis[s1]=;dis[s2]=;
  23. if(!v[])v[]=,dis[]=,q.push();
  24. q.push(s1);q.push(s2);
  25. while(!q.empty()){
  26. int now=q.front();q.pop();v[now]=;
  27. for(int i=head[now];i;i=e[i].pre){
  28. int to=e[i].to;
  29. if(dis[to]>dis[now]+e[i].v){
  30. dis[to]=dis[now]+e[i].v;
  31. if(!v[to]){
  32. v[to]=;
  33. q.push(to);
  34. }
  35. }
  36. }
  37. }
  38. for(int i=;i<=n;i++){
  39. ans+=(double)dis[i]*w;
  40. }
  41. int k=min(D[s1],D[s2]);
  42. ans+=(double)k*w;
  43. }
  44. void SPFA(int s){
  45. queue<int>q;
  46. memset(v,,sizeof(v));
  47. memset(D,/,sizeof(D));
  48. v[s]=;D[s]=;
  49. q.push(s);
  50. while(!q.empty()){
  51. int now=q.front();q.pop();v[now]=;
  52. for(int i=head[now];i;i=e[i].pre){
  53. int to=e[i].to;
  54. if(D[to]>D[now]+e[i].v){
  55. D[to]=D[now]+e[i].v;
  56. if(!v[to]){
  57. v[to]=;
  58. q.push(to);
  59. }
  60. }
  61. }
  62. }
  63. }
  64. int main(){
  65. //freopen("Cola.txt","r",stdin);
  66. freopen("detective.in","r",stdin);freopen("detective.out","w",stdout);
  67. scanf("%d%d",&n,&m);
  68. w=(double)(n*(n-))/2.0;
  69. w=1.0/w;
  70. int x,y,z;
  71. for(int i=;i<=m;i++){
  72. scanf("%d%d%d",&x,&y,&z);
  73. Insert(x,y,z);Insert(y,x,z);
  74. }
  75. SPFA();
  76. for(int i=;i<=n;i++){
  77. for(int j=;j<i;j++){
  78. spfa(i,j);
  79. }
  80. }
  81. printf("%.2lf",ans);
  82. /*int sz=sizeof(head)+sizeof(e);
  83. cout<<sz/1048576;*/
  84. }

0分 暴力

  1. /*
  2. 暴力算法:
  3. 求一遍最小生成树,枚举两个点,想象将两个点连上权值为0的边,然后进行倍增,求两点之间最长的一条边,删除这条边,当前树上所有边权和即为此时的花费,最后除以n*(n-1)
  4. */

O(n^2)暴力算法

  1. /*
  2. 枚举哪一条边可以删掉,由于克鲁斯卡尔最小生成树边是按从大到小顺序选入的,所以当前讨论的这条边一定是图上最大的边,而且既然他是最小生成树的一条边,他所连接的两个集合一定是两个树,将两棵树大小进行乘法原理,累计答案 (我在胡言乱语什么)
  3. */
  4. #include<iostream>
  5. #include<cstdio>
  6. #include<algorithm>
  7. #define maxn 20010
  8. #define maxm 100010
  9. using namespace std;
  10. struct node{
  11. int from,to,v;
  12. bool operator < (const node a)const{
  13. return v<a.v;
  14. }
  15. }e[maxm];
  16. int n,m,fa[maxn],s[maxn];
  17. unsigned long long sum,cnt;
  18. int find(int a){
  19. if(a==fa[a])return a;
  20. return fa[a]=find(fa[a]);
  21. }
  22. int main(){
  23. //freopen("Cola.txt","r",stdin);
  24. freopen("detective.in","r",stdin);freopen("detective.out","w",stdout);
  25. scanf("%d%d",&n,&m);
  26. for(int i=;i<=n;i++)fa[i]=i,s[i]=;
  27. for(int i=;i<=m;i++)scanf("%d%d%d",&e[i].from,&e[i].to,&e[i].v);
  28. sort(e+,e+m+);
  29. for(int i=;i<=m;i++){
  30. int x=find(e[i].from),y=find(e[i].to);
  31. if(x==y)continue;
  32. cnt+=1ULL*s[x]*s[y]*e[i].v;
  33. sum+=e[i].v;
  34. fa[y]=x;s[x]+=s[y];
  35. }
  36. double ans=sum-cnt/((n*(n-))/2.0);
  37. //double ans = sum - 2.0 * cnt / n / (n - 1);
  38. printf("%.2lf",ans);
  39. return ;
  40. }

100分 最小生成树

3.棋盘迷宫(分治,搜索)

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. using namespace std;
  6. int n,m,x1,x2,y1,y2,e[][]={{,},{,}};
  7. char map[][];
  8. bool vis[];
  9. int f(int x,int y){
  10. return (x-)*m+y;
  11. }
  12. bool BFS(){
  13. queue<int>q;
  14. memset(vis,,sizeof(vis));
  15. vis[f(x1,y1)]=;
  16. q.push(f(x1,y1));
  17. while(!q.empty()){
  18. int now=q.front();q.pop();
  19. int x=(now-)/m+,y=now-(x-)*m;
  20. for(int i=;i<;i++){
  21. int xx=x+e[i][],yy=y+e[i][];
  22. int w=f(xx,yy);
  23. if(xx==x2&&yy==y2)return ;
  24. if(xx>=&&xx<=n&&yy>=&&yy<=n&&xx<=x2&&yy<=y2&&!vis[w]&&map[xx][yy]=='.'){
  25. vis[w]=;
  26. q.push(w);
  27. }
  28. }
  29. }
  30. return ;
  31. }
  32. int main(){
  33. //freopen("Cola.txt","r",stdin);
  34. freopen("boardgame.in","r",stdin);freopen("boardgame.out","w",stdout);
  35. scanf("%d%d",&n,&m);
  36. for(int i=;i<=n;i++)scanf("%s",map[i]+);
  37. int q;
  38. scanf("%d",&q);
  39. while(q--){
  40. scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
  41. if(x2<x1||y2<y1){
  42. printf("No\n");
  43. continue;
  44. }
  45. if(x1==x2){
  46. bool flag=;
  47. for(int i=y1;i<=y2;i++){
  48. if(map[x1][i]=='#'){
  49. flag=;
  50. printf("No\n");break;
  51. }
  52. }
  53. if(!flag)printf("Yes\n");
  54. continue;
  55. }
  56. if(y1==y2){
  57. bool flag=;
  58. for(int i=x1;i<=x2;i++){
  59. if(map[i][y1]=='#'){
  60. flag=;
  61. printf("No\n");break;
  62. }
  63. }
  64. if(!flag)printf("Yes\n");
  65. continue;
  66. }
  67. int fl=BFS();
  68. if(fl)printf("Yes\n");
  69. else printf("No\n");
  70. }
  71. fclose(stdin);fclose(stdout);
  72. return ;
  73. }

20分 暴力

  1. /*
  2. 考试的时候忘记判断起点和终点是否合法了
  3. */
  4. #include<iostream>
  5. #include<cstdio>
  6. #include<cstring>
  7. #include<queue>
  8. using namespace std;
  9. int n,m,x1,x2,y1,y2,e[][]={{,},{,}};
  10. char map[][];
  11. bool vis[];
  12. int f(int x,int y){
  13. return (x-)*m+y;
  14. }
  15. bool BFS(){
  16. queue<int>q;
  17. memset(vis,,sizeof(vis));
  18. vis[f(x1,y1)]=;
  19. q.push(f(x1,y1));
  20. while(!q.empty()){
  21. int now=q.front();q.pop();
  22. int x=(now-)/m+,y=now-(x-)*m;
  23. for(int i=;i<;i++){
  24. int xx=x+e[i][],yy=y+e[i][];
  25. int w=f(xx,yy);
  26. if(xx>=&&xx<=n&&yy>=&&yy<=n&&xx<=x2&&yy<=y2&&!vis[w]&&map[xx][yy]=='.'){
  27. if(xx==x2&&yy==y2)return ;
  28. vis[w]=;
  29. q.push(w);
  30. }
  31. }
  32. }
  33. return ;
  34. }
  35. int main(){
  36. //freopen("Cola.txt","r",stdin);
  37. freopen("boardgame.in","r",stdin);freopen("boardgame.out","w",stdout);
  38. scanf("%d%d",&n,&m);
  39. for(int i=;i<=n;i++)scanf("%s",map[i]+);
  40. int q;
  41. scanf("%d",&q);
  42. while(q--){
  43. scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
  44. if(x2<x1||y2<y1){
  45. printf("No\n");
  46. continue;
  47. }
  48. if(x1==x2){
  49. bool flag=;
  50. for(int i=y1;i<=y2;i++){
  51. if(map[x1][i]=='#'){
  52. flag=;
  53. printf("No\n");break;
  54. }
  55. }
  56. if(!flag)printf("Yes\n");
  57. continue;
  58. }
  59. if(y1==y2){
  60. bool flag=;
  61. for(int i=x1;i<=x2;i++){
  62. if(map[i][y1]=='#'){
  63. flag=;
  64. printf("No\n");break;
  65. }
  66. }
  67. if(!flag)printf("Yes\n");
  68. continue;
  69. }
  70. if(map[x1][y1]=='#'){
  71. printf("No\n");
  72. continue;
  73. }
  74. int fl=BFS();
  75. if(fl)printf("Yes\n");
  76. else printf("No\n");
  77. }
  78. fclose(stdin);fclose(stdout);
  79. return ;
  80. }

40分 暴力

2017-10-6 清北刷题冲刺班p.m的更多相关文章

  1. 2017-10-4 清北刷题冲刺班p.m

    P102zhx a [问题描述]你是能看到第一题的 friends 呢.——hja两种操作:1.加入一个数.2.询问有多少个数是?的倍数.[输入格式]第一行一个整数?,代表操作数量.接下来?行,每行两 ...

  2. 2017-10-4 清北刷题冲刺班a.m

    P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...

  3. 2017-10-3 清北刷题冲刺班p.m

    a [问题描述]你是能看到第一题的 friends 呢.——hja给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法.[输入格式]一行一个括号序列.[输出格式]如果合法,输出 OK,否则输 ...

  4. 2017-10-3 清北刷题冲刺班a.m

    P99zhx a [问题描述]你是能看到第一题的 friends 呢.——hja怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两 ...

  5. 2017-10-2 清北刷题冲刺班a.m

    一道图论神题 (god) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...

  6. 2017-10-2 清北刷题冲刺班p.m

    最大值 (max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...

  7. 2017-10-1 清北刷题冲刺班p.m

    一道图论好题 (graph) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图 ...

  8. 2017-10-7 清北刷题冲刺班p.m

    测试 A 同花顺 文件名 输入文件 输出文件 时间限制 空间限制card.cpp/c/pas card.in card.out 1s 512MB题目描述所谓同花顺,就是指一些扑克牌,它们花色相同,并且 ...

  9. 2017-10-7 清北刷题冲刺班a.m

    测试 A 消失的数字 文件名 输入文件 输出文件 时间限制 空间限制del.cpp/c/pas del.in del.out 1s 512MB题目描述现在,我的手上有 n 个数字,分别是 a 1 ,a ...

  10. 2017-10-1 清北刷题冲刺班a.m

    位运算1 (bit) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK拥有一个十进制的数N.它赋予了N一个新的意义:将N每一位都拆开来后再加起来就是N所拥 ...

随机推荐

  1. node cluster模块的使用和测试

    首先安装async包 用到的有http.cluster包 http和cluster都会node自带的包,无需安装 1:创建cluster.js,代码如下,更具cpu创建多个进程 var cluster ...

  2. appium-环境搭建(一)

    adb命令 adb的全称为Android Debug Bridge,就是起到调试桥的作用.借助adb工具,我们可以管理设备或者手机模拟器的状态.还可以进行很多手机操作,如安装软件\系统升级\运行she ...

  3. HashMap,Hashtable,TreeMap ,Map

    package com.wzy.list; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterato ...

  4. IO - 同步,异步,阻塞,非阻塞 (转帖:http://blog.csdn.net/historyasamirror/article/details/5778378)

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

  5. nodejs stream & buffer 互相转换

    stream 转 buffer function streamToBuffer(stream) { return new Promise((resolve, reject) => { let b ...

  6. rust ownership 系统

    ### 对象销毁规则 未被使用的函数返回值 被let绑定的值, 在函数末尾销毁,除非被moved ``` let v = obj::new("a"); other_fun(v); ...

  7. hdu-5867 Water problem(水题)

    题目链接: Water problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  8. hdu5606 tree (并查集)

    tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  9. linux命令学习笔记(48):watch命令

    watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测 一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下 ...

  10. freeMarker(六)——程序开发指南入门

    学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 1.创建Configuration实例 首先,你应该创建一个 free ...