結果
| 問題 |
No.173 カードゲーム(Medium)
|
| コンテスト | |
| ユーザー |
沙耶花
|
| 提出日時 | 2021-11-03 16:49:25 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 1,041 ms / 3,000 ms |
| コード長 | 1,179 bytes |
| コンパイル時間 | 5,079 ms |
| コンパイル使用メモリ | 252,828 KB |
| 最終ジャッジ日時 | 2025-01-25 11:02:58 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
ソースコード
#include <stdio.h>
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace atcoder;
using mint = modint;
using namespace std;
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define Inf 2000000000
unsigned long xor128() {
static unsigned long x=123456789, y=362436069, z=521288629, w=88675123;
unsigned long t=(x^(x<<11));
x=y; y=z; z=w;
return (w=(w^(w>>19))^(t^(t>>8)));
}
int main(){
int N;
cin>>N;
int Pa,Pb;
{
double t;
cin>>t;
t *= 1000;
Pa = round(t);
}
{
double t;
cin>>t;
t *= 1000;
Pb = round(t);
}
vector<int> a(N),b(N);
rep(i,N){
cin>>a[i];
}
rep(i,N){
cin>>b[i];
}
sort(a.begin(),a.end());
sort(b.begin(),b.end());
double ans = 0.0;
rep(i,1000000){
auto aa = a,bb = b;
int Sa = 0,Sb = 0;
rep(j,N){
int x,y;
if(j==N-1||xor128()%1000<Pa)x = 0;
else x = xor128()%(N-1-j)+1;
if(j==N-1||xor128()%1000<Pb)y = 0;
else y = xor128()%(N-1-j)+1;
if(aa[x]>bb[y]){
Sa += aa[x]+bb[y];
}
else{
Sb += aa[x]+bb[y];
}
aa.erase(aa.begin()+x);
bb.erase(bb.begin()+y);
}
if(Sa>Sb){
ans += 1.0 / 1000000.0;
}
}
cout<<fixed<<setprecision(10)<<ans<<endl;
return 0;
}
沙耶花