Problem D. Grumpy Cat

题目连接:

http://www.codeforces.com/gym/100253

Description

This problem is a little bit unusual. Here you are to implement an interaction with a testing system. That

means that you can make queries and get responses in the online mode. Please be sure to use the stream

ushing operation after each query's output in order not to leave part of your output in some buer. For

example, in Ñ++ you've got to use the fflush(stdout) function, in Java call System.out.flush(),

and in Pascal flush(output).

Fall is coming and it's time to elect a new governor in Cattown. After looking at the results of the past

elections the citizens decided to nominate a new candidate Grumpy Cat. They said, all the previous

governors used to spend the Cattown's budget on their own needs and did nothing helpful for the town.

Grumpy Cat, they said, can't steal more money than he needs to feed himself.

The administration of Cattown refused to register Grumpy as a new candidate and it caused a lot of

discontent. People organized the biggest demonstration in the history of Cattown.

Your friend Eugene is a correspondent of a local newspaper. He has a work assignment to talk to

demonstrants to understand their main demands. After talking with several people Eugene realized that

each demonstrant either wants Grumpy Cat to be the new governor or doesn't want Grumpy Cat to be a

registered candidate or just wants to take part in the demonstration and doesn't have any requirements

at all. Let's call these 3 types of people grumpy-lovers, grumpy-haters and grumpy-neutral respectively. It

is known that there is at least one grumpy-lover and at least one grumpy-hater among the demonstrants.

Eugene decided to nd a type of each demonstrant. He can choose a group of demonstrants and ask them

for a number of Grumpy Cat supporters among the group. The people of Cattown don't like journalists,

reporters and correspondents. Each time Eugene asks a group of people, they proceed as follows:

  1. They talk to each other to understand who is who there. For sure, all grumpy-lovers are counted as

    Grumpy Cat supporters and grumpy-haters are not.
  2. If there are more grumpy-lovers than grumpy-haters in this group, all grumpy-neutrals express

    support of Grumpy Cat at the time of this survey.
  3. If there are more grumpy-haters than grumpy-lovers in this group, all grumpy-neutral people do not

    support Grumpy Cat at the time of this survey.
  4. If there are equal numbers of grumpy-haters and grumpy-lovers in this group, each grumpy-neutral

    demonstrant at the time of this survey decides to support or not to support independently on his

    own account.
  5. After all grumpy-neutral people decide their position regarding Grumpy Cat, somebody tells the

    correspondent the number of supporters.

    A fact that a grumpy-neutral person has supported or hasn't supported Grumpy Cat doesn't aect its

    decision in the future. Eugene can think that the surveys are completely independent.

    Eugene doesn't have much time to do too many surveys. He can do at most ⌊

    2πn

    3

    ⌋ surveys, where π is

    the ratio of a circle's circumference to its diameter and ⌊x⌋ is x rounded down. It seems too dicult for

    him! Help him and write a program to interact with demonstrants to nd the type of each demonstrant.

    Eugene knows that there is at least one grumpy-lover and there is at least one grumpy-hater among the

    demonstrants.

Input

To read answers to the queries your program should use standard input.

The input starts with a line containing a positive integer t the number of testcases in the test.

Each testcase starts with a line containing a single integer n (2 ≤ n ≤ 100) the number of demonstrants.

The following lines will contain one integer each the number of Grumpy Cat supporters according to

the preceding survey.

The total number of demonstrants in all testcases in the test doesn't exceed 1000

Output

The program should use the standard output to print queries. Each query describes a single survey. It

should contain exactly two lines: the rst line should contain g (1 ≤ g ≤ n) the number of demonstrants

in an interviewed group, the second line should contain g distinct positive integer numbers t1, t2, . . . , tg

(1 ≤ ti ≤ n) the numbers of the demonstrants in the group. The demonstrants are numbered from 1

to n.

After your program found the types of all the demonstrants it should print exactly two lines: the rst line

should contain the only integer -1, the second line should contain exactly n integer numbers f1, f2, . . . , fn

(1 ≤ fi ≤ 3), where fi = 1 if the i-th demonstrant is a grumpy-lover, fi = 2 if the i-th demonstrant is a

grumpy-hater and fi = 3 in case of the i-th demonstrant is grumpy-neutral.

After the output of each line your program should execute the flush operation. Use single space to

separate integers in a line. Each line should end with end-of-line.

The program should write queries for the succeeding testcase after printing two lines described in the

second paragraph for the previous testcase. The program should terminate normally after the last testcase.

Sample Input

2

3

2

1

0

5

0

3

Sample Output

3

1 2 3

3

1 2 3

1

2

-1

1 2 3

3

2 4 3

3

5 3 1

-1

1 2 3 2 3

Hint

题意

有三种人,一种是兹瓷的人,一种是不兹瓷的人,和一种摇摆不定的人。

你每次可以询问一个集合,问这个集合的人里面有多少个兹瓷的人。

摇摆不定的人会哪边人多,兹瓷哪边。如果一样多,就随便回答。

然后你最多问2n次,让你确定所有人的身份。

题解:

先每个人都问一遍,这样你可以把所有人分成两类:兹瓷和摇摆的集合A,不支持和摇摆的集合B。

然后对于每一个集合A的元素都和集合B的所有人问一遍,如果有一个兹瓷的,说明那个人是兹瓷,否则就是摇摆不定的。

反之同理。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int ans[maxn]; void solve()
{
memset(ans,0,sizeof(ans));
int n;
scanf("%d",&n);
vector<int> A;A.clear();
vector<int> B;B.clear();
for(int i=1;i<=n;i++)
{
printf("1\n%d\n",i);
fflush(stdout);
int x;scanf("%d",&x);
if(x==1)A.push_back(i);
else B.push_back(i);
}
for(int i=0;i<A.size();i++)
{
printf("%d\n",1+B.size());
fflush(stdout);
printf("%d",A[i]);
fflush(stdout);
for(int j=0;j<B.size();j++)
printf(" %d",B[j]),fflush(stdout);
printf("\n");
fflush(stdout);
int x;scanf("%d",&x);
if(x==0)ans[A[i]]=3;
else ans[A[i]]=1;
}
for(int i=0;i<B.size();i++)
{
printf("%d\n",1+A.size());
fflush(stdout);
printf("%d",B[i]);
fflush(stdout);
for(int j=0;j<A.size();j++)
printf(" %d",A[j]),fflush(stdout);
printf("\n");
fflush(stdout);
int x;scanf("%d",&x);
if(x==A.size()+1)ans[B[i]]=3;
else ans[B[i]]=2;
}
printf("-1\n");fflush(stdout);
for(int i=1;i<=n;i++)
{
if(i==1)printf("%d",ans[i]);
else printf(" %d",ans[i]);
fflush(stdout);
}
printf("\n");
fflush(stdout);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)solve();
return 0;
}

2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem D. Grumpy Cat 交互题的更多相关文章

  1. 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem K. KMC Attacks 交互题 暴力

    Problem K. KMC Attacks 题目连接: http://codeforces.com/gym/100714 Description Warrant VI is a remote pla ...

  2. 2018-2019 ICPC, NEERC, Southern Subregional Contest

    目录 2018-2019 ICPC, NEERC, Southern Subregional Contest (Codeforces 1070) A.Find a Number(BFS) C.Clou ...

  3. Codeforces 2018-2019 ICPC, NEERC, Southern Subregional Contest

    2018-2019 ICPC, NEERC, Southern Subregional Contest 闲谈: 被操哥和男神带飞的一场ACM,第一把做了这么多题,荣幸成为7题队,虽然比赛的时候频频出锅 ...

  4. 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror) Solution

    从这里开始 题目列表 瞎扯 Problem A Find a Number Problem B Berkomnadzor Problem C Cloud Computing Problem D Gar ...

  5. Codeforces1070 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred)总结

    第一次打ACM比赛,和yyf两个人一起搞事情 感觉被两个学长队暴打的好惨啊 然后我一直做傻子题,yyf一直在切神仙题 然后放一波题解(部分) A. Find a Number LINK 题目大意 给你 ...

  6. codeforce1070 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) 题解

    秉承ACM团队合作的思想懒,这篇blog只有部分题解,剩余的请前往星感大神Star_Feel的blog食用(表示男神汉克斯更懒不屑于写我们分别代写了下...) C. Cloud Computing 扫 ...

  7. 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred)

    A. Find a Number 找到一个树,可以被d整除,且数字和为s 记忆化搜索 static class S{ int mod,s; String str; public S(int mod, ...

  8. 2018.10.20 2018-2019 ICPC,NEERC,Southern Subregional Contest(Online Mirror, ACM-ICPC Rules)

    i207M的“怕不是一个小时就要弃疗的flag”并没有生效,这次居然写到了最后,好评=.= 然而可能是退役前和i207M的最后一场比赛了TAT 不过打得真的好爽啊QAQ 最终结果: 看见那几个罚时没, ...

  9. 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) Solution

    A. Find a Number Solved By 2017212212083 题意:$找一个最小的n使得n % d == 0 并且 n 的每一位数字加起来之和为s$ 思路: 定义一个二元组$< ...

随机推荐

  1. [iOS]Xcode处理过时方法的警告

    ####强迫症的福利, 有的时候, 我们特别讨厌Xcode中的代码警告, 以下就是遇到各种警告的时候的处理方法:(后续会一直更新) 产生警告的原因: 某些方法废弃了, 会产生警告! 样式: 处理方法: ...

  2. sql 循环语句几种方式(变量循环,游标循环,事务)

    --第一   ) ,),Orders )) declare @n int,@rows int --select @rows=count(1) from pe_Orders select @rows = ...

  3. arm GIC介绍之四【转】

    转自:https://blog.csdn.net/sunsissy/article/details/73882718 GIC是ARM体系中重要的组件,在认识到GIC的组成和功能之后,了解到IRQ的大致 ...

  4. nc用法【转】

    linux nc命令使用详解 功能说明:功能强大的网络工具 语 法:nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o& ...

  5. WPF为stackpanel设置滚动条

    最新遇到ItemControl控件增加滚动条功能,找半天还是在StackPanel模板外添加的. <ScrollViewer x:Name="scrolls" Vertica ...

  6. Windows安装pycrypto失败记录

    Windows 10家庭中文版,Python 3.6.4, 180824测试前端加密文本在后台揭秘,查询后发现,可以使用pycrypto模块实现,那么,安装它(pip),结果安装失败了. 本文暂时记录 ...

  7. [整理] mysql操作

    0.启动mysql(在windows中MySql以服务形式存在,在使用前应确保此服务已经启动) net start mysql 0.5获取版本信息 select version(); 1.root 登 ...

  8. Java编程的逻辑 (56) - 文件概述

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  9. java安装1.8的经验和Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVers问题处理

            java安装1.8后的问题:之前安装了jdk1.7和jdk1.6,之后又安装jdk1.8,然后执行java -version,输出的是1.8的,后来在注册表把jdk1.8改为1.7,然 ...

  10. IntelIJ IDEA配置Tomcat遇到问题Error during artifact deployment. See server log for details

    IntelIJ IDEA在配置tomcat的时候会遇到Error during artifact deployment. See server log for details.这样的问题,我的系统是W ...