zoukankan      html  css  js  c++  java
  • 【模拟】NEERC15 J Jump(2015-2016 ACM-ICPC)(Codeforces GYM 100851)

    题目链接:

      http://codeforces.com/gym/100851

    题目大意:

      系统里生成一个字符串C,一开始告诉你字符串的长度N(偶数)。接着你需要在n+500次内猜出这个字符串是什么。

      每次你可以输出一个长度为N的字符串S,系统根据你输出的字符串S和C的匹配数量输入一个数,若为n/2则输入n/2,若为n则输出n,否则输入0。

      只要一猜对字符串就要结束程序(即输入的数为n)。如果询问次数超过n+500则出错。每次输出完要fflush(stdout).

    题目思路:

      【模拟】

      这题真的很有意思。根据概率随机500次出现至少一次n/2或n的概率非常高(99.999%以上)

      于是先随机生成S串询问,如果找到不是0的回答则:

      假设S的第一个字符正确,每次将第I个字符和第一个字符取反,再询问取反后的字符,如果得到0的回答则表明取反后的I位是错误的,如果为n/2则取反后的I位正确,把相应正确的答案填到C里,把S取反的两位还原后做I+1位。(假设第一个字符正确,取反后错误,目前正确的个数为n/2-1,如果第I位取反后还是n/2个正确则表明取反后把当前这位改对了,否则就是改错了原先是对的)

      总共枚举N次即可得到答案。如果最终答案C还不对,则是前提条件(S的第一个字符正确)错了,把整个串都取反即使正解。(可以看作类似映射,从0->0,1->1变为0->1,1->0,各个字符之间的同异是不会改变的。)

      需要每次判断当前回答是不是n,是n就结束。

     1 //
     2 //by coolxxx
     3 //#include<bits/stdc++.h>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<string>
     7 #include<iomanip>
     8 #include<map>
     9 #include<stack>
    10 #include<queue>
    11 #include<set>
    12 #include<bitset>
    13 #include<memory.h>
    14 #include<time.h>
    15 #include<stdio.h>
    16 #include<stdlib.h>
    17 #include<string.h>
    18 //#include<stdbool.h>
    19 #include<math.h>
    20 #define min(a,b) ((a)<(b)?(a):(b))
    21 #define max(a,b) ((a)>(b)?(a):(b))
    22 #define abs(a) ((a)>0?(a):(-(a)))
    23 #define lowbit(a) (a&(-a))
    24 #define sqr(a) ((a)*(a))
    25 #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
    26 #define mem(a,b) memset(a,b,sizeof(a))
    27 #define eps (1e-8)
    28 #define J 10
    29 #define mod 1000000007
    30 #define MAX 0x7f7f7f7f
    31 #define PI 3.14159265358979323
    32 #define N 1004
    33 using namespace std;
    34 typedef long long LL;
    35 int cas,cass;
    36 int n,m,lll,ans;
    37 char s[N],c[N];
    38 int main()
    39 {
    40     #ifndef ONLINE_JUDGE
    41 //    freopen("1.txt","r",stdin);
    42 //    freopen("2.txt","w",stdout);
    43     #endif
    44     int i,j,k;
    45 //    for(scanf("%d",&cass);cass;cass--)
    46 //    for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
    47 //    while(~scanf("%s",s+1))
    48 //    while(~scanf("%d",&n))
    49     {
    50         srand(time(0));
    51         scanf("%d",&n);
    52         m=0;
    53         while(!m)
    54         {
    55             for(i=0;i<n;i++)s[i]=(rand()&1)?'0':'1';
    56             puts(s);
    57             fflush(stdout);
    58             scanf("%d",&m);
    59         }
    60         if(m==n)return 0;
    61         c[0]=s[0];
    62         s[0]='0'+'1'-s[0];
    63         for(i=1;i<n;i++)
    64         {
    65             s[i]='0'+'1'-s[i];
    66             puts(s);
    67             fflush(stdout);
    68             scanf("%d",&m);
    69             if(m==n)return 0;
    70             if(m)c[i]=s[i];
    71             else c[i]='0'+'1'-s[i];
    72             s[i]='0'+'1'-s[i];
    73         }
    74         puts(c);
    75         fflush(stdout);
    76         scanf("%d",&m);
    77         if(m==n)return 0;
    78         for(i=0;i<n;i++)c[i]='0'+'1'-c[i];
    79         puts(c);
    80         fflush(stdout);
    81         scanf("%d",&m);
    82     }
    83     return 0;
    84 }
    85 /*
    86 //
    87 
    88 //
    89 */
    View Code
  • 相关阅读:
    17.allegro导入导出[原创]
    16.allegro元件手动摆放[原创]
    15.导入网表及status介绍[原创]
    14.allegro.PCB设计前工作[原创]
    13.allegro 颜色设置[原创]
    env1
    allegro使用汇总 [转贴]
    allegro下快捷键设置[转贴]
    使用Cygwin在Windows上体验Linux的快感
    你们值得拥有最好的未来——致武汉校区每位学员
  • 原文地址:https://www.cnblogs.com/Coolxxx/p/5822696.html
Copyright © 2011-2022 走看看