一直过不去样例,CF 显示格式出错,但是始终没找到问题
查看原帖
一直过不去样例,CF 显示格式出错,但是始终没找到问题
305891
Eraine楼主2024/9/6 20:32

能帮忙看看为什么显示格式出错就行,不需要指正算法本身的错误。急,悬 1 关。

#include<bits/stdc++.h>
using namespace std;
typedef double db;
const int N=30;
const int K=3;
const db eps=1e-9;
int n;
bool vis[K][N];
db f[K][N][2],dir[N][2];
void query(int id,db a,db b,db c){
	cout<<"? "<<a<<" "<<b<<" "<<c<<endl;
    fflush(stdout);
    for(int i=1;i<=n;i++){
        scanf("%lf%lf",&f[id][i][0],&f[id][i][1]);
    }
}
void print(){
    cout<<"! ";
    for(int i=1;i<=n;i++){
		cout<<dir[i][0]<<" "<<dir[i][1]<<" ";
    }
    fflush(stdout);
}
db A[K]={0,1,5.7};
db B[K]={1,0,-0.2};
db C[K]={-1,-1,3.4};
int id[K];
db Abs(db x){
    return max(x,-x);
}
bool check(db x,db y,int id,int pos){
    if(Abs(x-f[id][pos][0])+Abs(y-f[id][pos][1])<eps){
        return 1;
    }
    if(Abs(x-f[id][pos][0])<eps||Abs(y-f[id][pos][1])<eps){
        return 0;
    }
    return Abs((-A[id]/B[id])*((y-f[id][pos][1])/(x-f[id][pos][0]))+1)<eps;
}
void solve(){
    memset(vis,0,sizeof vis);
    scanf("%d",&n);
    for(int i=0;i<K;i++){
        query(i,A[i],B[i],C[i]);
    }
    for(int i=1;i<=n;i++){
        bool flag=0;
        for(int j=1;j<=n;j++){
            id[0]=i,id[1]=j;
            if(vis[1][j]){
                continue;
            }
            db x=f[0][i][0],y=f[1][j][1];
            bool flag2=1;
            for(int d=2;d<K;d++){
                bool flag3=0;
                for(int p=1;p<=n;p++){
                    if(vis[d][p]){
                        continue;
                    }
                    if(check(x,y,d,p)){
                        id[d]=p;
                        flag3=1;
                        break;
                    }
                }
                if(!flag3){
                    flag2=0;
                    break;
                }
            }
            if(flag2){
                flag=1;
//				printf("i=%d j=%d\n",i,j);
                dir[i][0]=x,dir[i][1]=y;
                for(int d=0;d<n;d++){
                    vis[d][id[d]]=1;
                }
                break; 
            }
        }
    }
    print();
}
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        solve();
    }
    return 0;
}
2024/9/6 20:32
加载中...