Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- bool ManyEdges(int x,vector<int> s)
- {
- printf("2 %d %d",x,s.size());
- for (int i:s)
- printf(" %d",i);
- printf("\n");
- fflush(stdout);
- int ret;
- scanf("%d",&ret);
- if (ret==-1)
- exit(0);
- return ret;
- }
- bool OneEdge(int a,int b)
- {
- printf("1 %d %d\n",a,b);
- fflush(stdout);
- int ret;
- scanf("%d",&ret);
- if (ret==-1)
- exit(0);
- return ret;
- }
- vector<int> getprefix(vector<int> v,int p)
- {
- vector<int> ret;
- for (int i=0;i<=p;i++)
- ret.push_back(v[i]);
- return ret;
- }
- vector<vector<int> > getMap(int n)
- {
- vector<vector<int> > ret(n,vector<int>(n,1));
- vector<int> path;
- for (int i=0;i<n;i++)
- path.push_back(i);
- stable_sort(path.begin(),path.end(),OneEdge);
- int p=n-2;
- for (int i=n-1;i>=0;i--)
- {
- if (p==i)
- {
- for (int j=0;j<=i;j++)
- {
- for (int k=i+1;k<n;k++)
- ret[path[k]][path[j]]=0;
- }
- p--;
- }
- while (ManyEdges(path[i],getprefix(path,p)))
- p--;
- }
- return ret;
- }
- int main()
- {
- int t;
- scanf("%d",&t);
- while (t--)
- {
- int n;
- scanf("%d",&n);
- auto res=getMap(n);
- puts("3");
- for (int i=0;i<n;i++)
- {
- for (int j=0;j<n;j++)
- printf("%d",res[i][j]);
- printf("\n");
- }
- fflush(stdout);
- int ok;
- scanf("%d",&ok);
- if (ok==-1)
- exit(0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement