QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#126517 | #6668. Trokuti | angry_face | 0 | 8ms | 3860kb | C++14 | 3.1kb | 2023-07-18 15:51:38 | 2023-07-18 15:51:40 |
Judging History
answer
# include <iostream>
# include <cstdio>
# include <vector>
# include <ctime>
# include <algorithm>
using namespace std ;
int n = 100 , a[205][205] , num[205][205] ;
int p[205] , st[205] ;
int cnt , x1 , x2 , x3 , cntq , q[205] ;
int ans ;
vector < int > vec ;
int query( int x , int y , int z )
{
cnt++ ;
printf("? %d %d %d\n" , x , y , z) ;
fflush( stdout ) ;
int t ;
scanf("%d" , &t) ;
return t ;
}
int solve(int u,int v,int w)
{
x1 = ( u - v + w ) / 2 ;
x2 = v - x1 ;
x3 = w - x1 ;
}
int main()
{
// for ( int i = 1 ; i <= n ; i++ )
// for ( int j = i + 1 ; j <= n ; j++ ) a[i][j] = a[j][i] = rand() % 2 ;
for ( int i = 1 ; i <= n ; i++ ) p[i] = i ;
for ( int i = 1 ; i <= 6 ; i++ )
for ( int j = i + 1 ; j <= 6 ; j++ )
for ( int k = j + 1 ; k <= 6 ; k++ )
{
if ( vec.size() ) continue ;
ans = query( p[i] , p[j] , p[k] ) ;
if ( ! ans )
{
vec.push_back( p[i] ) , vec.push_back( p[j] ) , vec.push_back( p[k] ) ;
st[p[i]] = st[p[j]] = st[p[k]] = 1;
}
else if ( ans == 3 )
{
vec.push_back( p[i] ) , vec.push_back( p[j] ) , vec.push_back( p[k] ) ;
st[p[i]] = st[p[j]] = st[p[k]] = 1;
num[p[i]][p[j]] = num[p[j]][p[i]] = num[p[i]][p[k]] = num[p[k]][p[i]] = num[p[j]][p[k]] = num[p[k]][p[j]] = 1 ;
}
}
for ( int i = 1 ; i <= n ; i++ )
{
if ( st[p[i]] ) continue ;
cntq =0 ;
for ( auto j : vec ) q[++ cntq] = j ;
int tmp = 1 ;
while ( tmp + 2 <= cntq )
{
int ansb = query( p[i] , q[tmp] , q[tmp + 1] ) - num[q[tmp]][q[tmp + 1]] ;
if ( ansb == 0 || ansb == 2 )
{
num[p[i]][q[tmp]] = num[q[tmp]][p[i]] = num[p[i]][q[tmp + 1]] = num[q[tmp + 1]][p[i]] = ansb / 2 ;
tmp += 2 ;
continue ;
}
int nbc = query( p[i] , q[tmp + 1] , q[tmp + 2] ) - num[q[tmp + 1]][q[tmp + 2]] ;
if ( nbc == 0 || nbc == 2 )
{
num[p[i]][q[tmp + 1]] = num[q[tmp + 1]][p[i]] = num[p[i]][q[tmp + 2]] = num[q[tmp + 2]][p[i]] = nbc / 2 ;
num[p[i]][q[tmp]] = num[q[tmp]][p[i]] = ansb - num[p[i]][q[tmp + 1]] ;
tmp += 3 ;
continue ;
}
int ansc = query( p[i] , q[tmp] , q[tmp + 2] ) - num[q[tmp]][q[tmp + 2]] ;
solve( ansb , nbc , ansc ) ;
num[p[i]][q[tmp]] = num[q[tmp]][p[i]] = x1 ;
num[p[i]][q[tmp + 1]] = num[q[tmp + 1]][p[i]] = x2 ;
num[p[i]][q[tmp + 2]] = num[q[tmp + 2]][p[i]] = x3 ;
tmp += 3 ;
}
if ( tmp <= cntq )
{
num[p[i]][q[tmp]] = num[q[tmp]][p[i]] = query( p[i] , q[tmp - 1] , q[tmp] ) - num[p[i]][q[tmp - 1]] - num[q[tmp - 1]][q[tmp]] ;
}
if ( tmp + 1 <= cntq )
{
num[p[i]][q[tmp + 1]] = num[q[tmp + 1]][p[i]] = query( p[i] , q[tmp - 1] , q[tmp + 1] ) - num[p[i]][q[tmp - 1]] - num[q[tmp - 1]][q[tmp + 1]] ;
}
vec.push_back( p[i] ) ;
st[p[i]] = true ;
}
// for ( int i = 1 ; i <= n ; i++ )
// for ( int j = i + 1 ; j <= n ; j++ )
// {
// if ( num[i][j] != a[i][j] )
// {
// printf("GG:%d %d\n" , i , j) ;
// }
// }
puts("!") ;
for ( int i = 1 ; i <= n ; i++ )
{
for ( int j = 1 ; j <= n ; j++ ) printf("%d" , num[i][j]) ;
puts("") ;
}
fflush( stdout ) ;
return 0 ;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Time Limit Exceeded
Test #1:
score: 100
Accepted
time: 3ms
memory: 3860kb
input:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
? 1 2 3 ? 4 1 2 ? 4 2 3 ? 5 1 2 ? 5 2 3 ? 5 2 4 ? 6 1 2 ? 6 3 4 ? 6 4 5 ? 7 1 2 ? 7 3 4 ? 7 4 5 ? 7 4 6 ? 8 1 2 ? 8 3 4 ? 8 5 6 ? 8 6 7 ? 9 1 2 ? 9 3 4 ? 9 5 6 ? 9 6 7 ? 9 6 8 ? 10 1 2 ? 10 3 4 ? 10 5 6 ? 10 7 8 ? 10 8 9 ? 11 1 2 ? 11 3 4 ? 11 5 6 ? 11 7 8 ? 11 8 9 ? 11 8 10 ? 12 1 2 ? 12 3 4 ? 12 5...
result:
points 1.0 points 1.0 correct 2547 queries
Test #2:
score: 100
Accepted
time: 8ms
memory: 3632kb
input:
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ...
output:
? 1 2 3 ? 4 1 2 ? 4 2 3 ? 5 1 2 ? 5 2 3 ? 5 2 4 ? 6 1 2 ? 6 3 4 ? 6 4 5 ? 7 1 2 ? 7 3 4 ? 7 4 5 ? 7 4 6 ? 8 1 2 ? 8 3 4 ? 8 5 6 ? 8 6 7 ? 9 1 2 ? 9 3 4 ? 9 5 6 ? 9 6 7 ? 9 6 8 ? 10 1 2 ? 10 3 4 ? 10 5 6 ? 10 7 8 ? 10 8 9 ? 11 1 2 ? 11 3 4 ? 11 5 6 ? 11 7 8 ? 11 8 9 ? 11 8 10 ? 12 1 2 ? 12 3 4 ? 12 5...
result:
points 1.0 points 1.0 correct 2547 queries
Test #3:
score: 100
Accepted
time: 8ms
memory: 3704kb
input:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
? 1 2 3 ? 4 1 2 ? 4 2 3 ? 5 1 2 ? 5 2 3 ? 5 2 4 ? 6 1 2 ? 6 3 4 ? 6 4 5 ? 7 1 2 ? 7 3 4 ? 7 4 5 ? 7 4 6 ? 8 1 2 ? 8 3 4 ? 8 5 6 ? 8 6 7 ? 9 1 2 ? 9 3 4 ? 9 5 6 ? 9 6 7 ? 9 6 8 ? 10 1 2 ? 10 3 4 ? 10 5 6 ? 10 7 8 ? 10 8 9 ? 11 1 2 ? 11 3 4 ? 11 5 6 ? 11 7 8 ? 11 8 9 ? 11 8 10 ? 12 1 2 ? 12 3 4 ? 12 5...
result:
points 1.0 points 1.0 correct 2548 queries
Test #4:
score: 0
Time Limit Exceeded
input:
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ...
output:
? 1 2 3 ? 4 1 2 ? 4 2 3 ? 5 1 2 ? 5 2 3 ? 5 2 4 ? 6 1 2 ? 6 3 4 ? 6 4 5 ? 7 1 2 ? 7 3 4 ? 7 4 5 ? 7 4 6 ? 8 1 2 ? 8 3 4 ? 8 5 6 ? 8 6 7 ? 9 1 2 ? 9 3 4 ? 9 5 6 ? 9 6 7 ? 9 6 8 ? 10 1 2 ? 10 3 4 ? 10 5 6 ? 10 7 8 ? 10 8 9 ? 11 1 2 ? 11 3 4 ? 11 5 6 ? 11 7 8 ? 11 8 9 ? 11 8 10 ? 12 1 2 ? 12 3 4 ? 12 5...