結果
| 問題 | No.133 カードゲーム | 
| コンテスト | |
| ユーザー |  Tttt Yay | 
| 提出日時 | 2020-10-26 23:22:45 | 
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 2 ms / 5,000 ms | 
| コード長 | 1,088 bytes | 
| コンパイル時間 | 1,672 ms | 
| コンパイル使用メモリ | 178,132 KB | 
| 実行使用メモリ | 5,376 KB | 
| 最終ジャッジ日時 | 2024-07-21 21:44:46 | 
| 合計ジャッジ時間 | 2,551 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 4 | 
| other | AC * 19 | 
ソースコード
#include <bits/stdc++.h>
//#include <atcoder/all>
#define rep(i, n) for (int i = 0; i < (n); i++)
using ll = long long;
using namespace std;
//using namespace atcoder;
const int mod = 1e7+7;
const int INF =1e9+1;
int n;
vector<int> a,b;
vector<bool> flag1,flag2;
int win=0, match=0;
void dfs(vector<int> x,vector<int> y){
    if(x.size()==n){
        match++;
        int tmp1=0,tmp2=0;
        rep(i,n){
            if(x[i]>y[i])tmp1++;
            else if(x[i]<y[i])tmp2++;
        }
        if(tmp1>tmp2)win++;
        return ;
    }
    for(int i=0;i<n;i++){
        if(flag1[i]==1)continue;
        x.push_back(a[i]);flag1[i]=1;
        rep(j,n){
            if(flag2[j]==1)continue;
            y.push_back(b[j]);flag2[j]=1;
            dfs(x,y);
            y.pop_back();flag2[j]=0;
        }
        x.pop_back(); flag1[i]=0;
    }
}
 
 
int main() {
    cin>>n;
    a=b=vector<int> (n);
    flag1=flag2=vector<bool>(n,0);
    rep(i,n)cin>>a[i];
    rep(i,n)cin>>b[i];
    dfs(vector<int>(0),vector<int>(0));
    cout<<fixed<<setprecision(15);
    cout<<(double)win/match<<endl;
}
            
            
            
        