QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#798820#8363. interactiveL_Wave10 4551ms10064kbC++204.7kb2024-12-04 17:27:052024-12-04 17:27:06

Judging History

你现在查看的是最新测评结果

  • [2024-12-04 17:27:06]
  • 评测
  • 测评结果:10
  • 用时:4551ms
  • 内存:10064kb
  • [2024-12-04 17:27:05]
  • 提交

answer

// Problem: #P13098. 交互题
// Author: XZC(L_Wave)
// Language: Cpp/G++20
// Contest: Hydro
// URL: http://www.nfls.com.cn:10611/p/5472
// Memory Limit: 512 MB
// Time Limit: 2000 ms
// Create Time: not 2024-12-03 20:49:39, but 1926-08-17 11:45:14
// 
// Powered by CP Editor (https://cpeditor.org)

#ifndef LOCAL
#include"interactive.h"
#else
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <numeric>
#include <random>
#include <chrono>

std::vector<int> solve(int n);
int query(std::vector<int> vec);

#define rep0(i, n) for(int i = 0; i < (int)(n); i ++)
#define rep1(i, n) for(int i = 1; i <= (int)(n); i ++)
using namespace std;

namespace
{
	const int MAXN = 500, MAXQ = 300000;
	int n, ty, p[505], mat[505][505], cnt;
	bool vis[505];
	bool legal(const vector<int>& arr)
	{
		if((int)arr.size() != n) return false;
		rep1(i, n) vis[i] = false;
		rep0(i, arr.size()) {
			if(arr[i] < 1 || arr[i] > n || vis[arr[i]]) return false;
			vis[arr[i]] = true;
		}
		return true;
	}
}

int query(vector<int> arr)
{
	if(cnt == MAXQ || !legal(arr)) {
		printf("WA: 0\n"); exit(0);
	}
	
	int ret = 0;
	rep0(i, (int)arr.size() - 1) ret += mat[arr[i]][arr[i + 1]];
	cnt ++;
	return ret;
}

int main()
{
	scanf("%d%d", &ty, &n);
	iota(p+1,p+n+1,1);
	std::mt19937 rng(chrono::steady_clock().now().time_since_epoch().count());
	shuffle(p+1,p+n+1,rng);
	if (ty==1)
	rep1(i, n) scanf("%d", &p[i]);
	rep1(i, n - 1) mat[p[i]][p[i + 1]] = mat[p[i + 1]][p[i]] = 1;
	
	vector<int> ans = solve(n);
	if(!legal(ans)) printf("WA: 1\n");
	else {
		int sum = 0;
		rep0(i, n - 1) sum += mat[ans[i]][ans[i + 1]];
		if(sum == n - 1) printf("AC: %d\n", cnt);
		else printf("WA: 1\n");
	}
	exit(0);
}
#endif

#include <bits/stdc++.h>
#undef rep
#define rep(i, a, b) for (int i = (a), i##ABRACADABRA = (b); i <= i##ABRACADABRA; i++)
#define drep(i, a, b) for (int i = (a), i##ABRACADABRA = (b); i >= i##ABRACADABRA; i--)
using namespace std;
using ll = long long;

namespace local{

constexpr int K = 11000;

vector<int>res;
mt19937 rng(chrono::steady_clock().now().time_since_epoch().count());
int id[505][505],p[505],now,n;
long double w[505][505];
bool vis[505],gt[505][505];

void getp(int u){
  p[++now]=u;
  vis[u]=1;
  rep(v,1,n)if (!gt[u][id[u][v]]&&u!=id[u][v]&&!vis[id[u][v]]){
    // cout<<u<<" --> "<<v<<' '<<vis[v]<<' '<<now<<'\n';
    gt[u][id[u][v]]=gt[id[u][v]][u]=1;
    getp(id[u][v]);
    return ;
  }
}

void dfs(int u){
  // cout<<u<<'\n';
  res.push_back(u);
  vis[u]=1;
  rep(v,1,n)if (!vis[id[u][v]]){
    dfs(id[u][v]);
    return ;
  }
}

int ask(){
  vector<int>Q;
  rep(i,1,n)Q.push_back(p[i]);
  return query(Q);
}

void adj(vector<pair<int,int>>V,long double val){
  val/=V.size();
  for (auto [x,y]:V)w[x][y]=w[y][x]=(w[x][y]*10+val)/11;
}

std::vector<int> solve(int _n){
  n=_n;
  rep(i,1,n)rep(j,1,n){
    if (i^j)w[i][j]=2.l/n;
    else w[i][j]=-1e9;
  }
  rep(i,1,K){
    now=0;
    if (i<n){
      rep(i,1,n){
        iota(id[i]+1,id[i]+n+1,1);
        sort(id[i]+1,id[i]+n+1,[&](int x,int y){
          return w[i][x]>w[i][y];
        });
      }
      memset(vis,0,sizeof(vis));
      getp(1);
      // cout<<n<<'\n';
      // rep(i,1,n)cout<<p[i]<<' ';
      // cout<<'\n';
    }
    if (now<n){
      iota(p+1,p+n+1,1);
      shuffle(p+1,p+n+1,rng);
    }
    int x=ask();
    // cout<<"$$ "<<x<<'\n';
    rep(t,1,n-1)if (w[p[t]][p[t+1]]>0.9999)--x;
    if (!x){
      rep(t,1,n-1)if (w[p[t]][p[t+1]]<=0.9999)w[p[t]][p[t+1]]=w[p[t+1]][p[t]]=-1e9;
      // rep(i,1,n)rep(j,1,n)cout<<w[i][j]<<" \n"[j==n];
      continue;
    }
    vector<pair<int,int>>V;
    rep(t,1,n-1)if (w[p[t]][p[t+1]]>0&&w[p[t]][p[t+1]]<=0.9999)V.push_back({p[t],p[t+1]});
    if (x==(int)V.size()){
      for (auto [x,y]:V)w[x][y]=w[y][x]=1;
      V.clear();
    }
    // if (V.size()==1)cout<<w[V[0].first][V[0].second]<<' '<<x<<'\n';
    adj(V,x);
    // if (V.size()==1)cout<<w[V[0].first][V[0].second]<<'\n';
    // if (x==-1){
      // rep(i,1,n)cout<<p[i]<<' ';
      // cout<<'\n';
      // rep(i,1,n-1)if (w[p[i]][p[i+1]]>0.9999)cout<<p[i]<<' '<<p[i+1]<<' '<<w[p[i]][p[i+1]]<<'\n';
    // }
    // rep(i,1,n)rep(j,1,n)cout<<w[i][j]<<" \n"[j==n];
  }
  int pos=0;
  long double mx=0;
  rep(i,1,n){
    iota(id[i]+1,id[i]+n+1,1);
    sort(id[i]+1,id[i]+n+1,[&](int x,int y){
      return w[i][x]>w[i][y];
    });
  }
  rep(i,1,n){
    memset(vis,0,sizeof(vis));
    res.clear();
    dfs(i);
    long double val=1;
    rep(i,0,n-2)val=min(val,w[res[i]][res[i+1]]);
    if (mx<val)mx=val,pos=i;
  }
  memset(vis,0,sizeof(vis));
  res.clear();
  dfs(pos);
  return res;
}

}

std::vector<int> solve(int n){return local::solve(n);}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 10
Accepted

Test #1:

score: 10
Accepted
time: 2ms
memory: 5936kb

input:

1 3
3 1 2

output:

11000 521245195 7113

result:

points 1.0

Test #2:

score: 10
Accepted
time: 8ms
memory: 6296kb

input:

1 30
6 28 10 9 13 4 7 1 21 15 20 27 19 5 17 2 22 12 29 23 14 30 18 3 11 24 26 16 8 25

output:

11000 521245195 537621159

result:

points 1.0

Test #3:

score: 10
Accepted
time: 7ms
memory: 6144kb

input:

1 27
24 17 15 3 13 9 6 16 14 22 7 19 25 12 1 26 23 27 10 21 8 5 18 11 20 4 2

output:

11000 521245195 966160455

result:

points 1.0

Test #4:

score: 10
Accepted
time: 7ms
memory: 6292kb

input:

1 29
24 8 7 14 19 20 4 6 1 12 18 2 10 3 23 13 26 11 22 27 9 17 16 5 21 29 25 15 28

output:

11000 521245195 646167394

result:

points 1.0

Test #5:

score: 10
Accepted
time: 4ms
memory: 8336kb

input:

1 30
9 22 10 27 8 5 23 21 2 25 6 13 30 19 17 20 4 14 29 28 24 15 11 7 12 18 26 16 3 1

output:

11000 521245195 904341262

result:

points 1.0

Test #6:

score: 10
Accepted
time: 7ms
memory: 5920kb

input:

1 27
8 6 11 20 24 7 9 25 13 19 2 3 23 15 16 4 22 21 10 18 12 27 14 5 1 17 26

output:

11000 521245195 173992498

result:

points 1.0

Test #7:

score: 10
Accepted
time: 7ms
memory: 6088kb

input:

1 27
2 5 25 13 11 12 23 24 6 18 19 21 15 17 7 10 16 20 22 27 3 4 8 14 26 1 9

output:

11000 521245195 772894146

result:

points 1.0

Test #8:

score: 10
Accepted
time: 7ms
memory: 6036kb

input:

1 27
13 11 10 27 20 23 3 25 12 24 6 2 19 9 7 17 1 5 8 26 14 16 21 15 22 4 18

output:

11000 521245195 181323461

result:

points 1.0

Test #9:

score: 10
Accepted
time: 7ms
memory: 7996kb

input:

1 27
3 15 12 14 18 27 23 6 20 26 21 5 13 19 10 9 11 17 16 4 25 7 24 2 22 1 8

output:

11000 521245195 480249695

result:

points 1.0

Test #10:

score: 10
Accepted
time: 4ms
memory: 8384kb

input:

1 29
23 7 4 10 9 16 1 14 3 17 13 19 15 8 5 22 24 29 11 12 18 25 21 2 28 26 27 20 6

output:

11000 521245195 31142540

result:

points 1.0

Subtask #2:

score: 0
Wrong Answer

Test #11:

score: 90
Accepted
time: 7ms
memory: 6016kb

input:

1 27
17 16 3 20 27 5 2 13 24 21 25 23 19 9 7 4 22 12 26 15 14 11 1 18 6 10 8

output:

11000 521245195 558749364

result:

points 1.0

Test #12:

score: 90
Accepted
time: 7ms
memory: 6068kb

input:

1 29
19 13 20 22 26 1 23 24 3 14 8 25 29 17 10 9 15 11 18 4 2 28 21 7 6 12 16 27 5

output:

11000 521245195 145445666

result:

points 1.0

Test #13:

score: 90
Accepted
time: 7ms
memory: 6096kb

input:

1 28
16 7 19 9 23 12 20 26 4 10 15 8 21 5 1 22 27 2 18 24 28 6 3 14 13 17 25 11

output:

11000 521245195 877668399

result:

points 1.0

Test #14:

score: 90
Accepted
time: 8ms
memory: 8168kb

input:

1 30
13 4 29 25 16 14 6 15 19 28 7 20 3 23 12 17 8 22 1 24 9 30 21 18 2 26 27 10 11 5

output:

11000 521245195 737974315

result:

points 1.0

Test #15:

score: 90
Accepted
time: 3ms
memory: 7992kb

input:

1 27
18 25 15 20 23 14 4 16 27 6 2 12 21 19 17 26 9 8 10 11 3 7 13 22 24 5 1

output:

11000 521245195 590934171

result:

points 1.0

Test #16:

score: 0
Wrong Answer
time: 4551ms
memory: 10064kb

input:

2 494
364 164 445 359 288 412 15 377 91 481 14 3 357 358 269 136 336 106 392 200 50 388 33 338 114 11 266 186 170 239 494 196 395 68 36 423 378 218 342 275 67 240 120 86 134 356 190 323 123 339 187 30 270 430 292 121 372 404 94 143 454 309 461 344 141 480 474 248 199 42 150 260 369 483 493 124 396 4...

output:

0 0 0

result:

FAIL WA