QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#811991 | #9804. Guess the Polygon | 275307894a# | RE | 0ms | 0kb | C++14 | 2.3kb | 2024-12-13 10:25:55 | 2024-12-13 10:25:56 |
Judging History
answer
#include<bits/stdc++.h>
#define Gc() getchar()
#define Me(x,y) memset(x,y,sizeof(x))
#define Mc(x,y) memcpy(x,y,sizeof(x))
#define d(x,y) ((m)*(x-1)+(y))
#define R(n) (rnd()%(n)+1)
#define Pc(x) putchar(x)
#define LB lower_bound
#define UB upper_bound
#define fi first
#define se second
#define eb emplace_back
#define all(x) x.begin(),x.end()
using namespace std;using ll=long long;using db=double;using lb=long db;using ui=unsigned;using ull=unsigned long long;using pii=pair<int,int>;
const int N=1e3+5,M=N*4+5,K=1000+5,mod=998244353,Mod=mod-1;const db eps=1e-9;const int INF=1e9+7;mt19937 rnd(28382);
#define Tp template<typename T>
#define Ts template<typename T,typename... Ar>
namespace Debug{
Tp void _debug(char* f,T t){cerr<<f<<'='<<t<<endl;}
Ts void _debug(char* f,T x,Ar... y){while(*f!=',') cerr<<*f++;cerr<<'='<<x<<",";_debug(f+1,y...);}
#ifdef LOCAL
#define gdb(...) _debug((char*)#__VA_ARGS__,__VA_ARGS__)
#else
#define gdb(...) void()
#endif
}using namespace Debug;
int n,A[N],B[N],m;
using frac=pair<ll,ll>;
frac operator +(const frac &A,const frac &B){
int g=__gcd(A.se,B.se);
return frac(B.se/g*A.fi+A.se/g*B.fi,A.se/g*B.se);
}
frac operator -(const frac &A,const frac &B){
return A+frac(-B.fi,B.se);
}
frac operator *(const frac &A,const frac &B){
return frac(A.fi*B.fi,A.se*B.se);
}
frac operator /(const frac &A,const frac &B){
return A*frac(B.se,B.fi);
}
frac query(int x,int y){
cout<<"? "<<x<<' '<<y<<endl;
cin>>x>>y;
return frac(x,y);
}
void Solve(){
cin>>n;m=n;
Me(B,0);
for(int i=1;i<=n;i++){
int x,y;cin>>x>>y;
A[i]=x;B[x]++;
}
sort(A+1,A+n+1);m=unique(A+1,A+n+1)-A-1;
frac La=frac(0,1),ans=frac(0,1);
for(int i=1;i<m;i++){
if(B[A[i]]>=2){
frac w1=query(A[i]*3+1,3),w2=query(A[i+1]*3-1,3);
frac d=w2-w1;
d=d/frac((A[i+1]-A[i])*3-2,1);
La=w2+d;
ans=ans+(w1+w2)*frac(A[i+1]-A[i],2);
}else{
frac w1=La,w2=query(A[i+1]*3-1,3);
frac d=w2-w1;
d=d/frac((A[i+1]-A[i])*3-1,1);
La=w2+d;
ans=ans+(w1+w2+d)*frac(A[i+1]-A[i],2);
}
}
if(ans.fi<0) ans.fi*=-1,ans.se*=-1;
ll g=__gcd(ans.fi,ans.se);
cout<<"! "<<ans.fi/g<<' '<<ans.se/g<<endl;
}
int main(){
// freopen("1.in","r",stdin);freopen("1.out","w",stdout);
int t=1;
scanf("%d",&t);
while(t--) Solve();
cerr<<clock()*1.0/CLOCKS_PER_SEC<<'\n';
}
詳細信息
Test #1:
score: 0
Runtime Error
input:
2 4 3 0 1 3 1 1 0 0 4 3 5 3
output:
? 2 3 ? 4 3 ? 8 3