NC247047. GCPC总决赛
描述
输入描述
第一行给定一个正整数 表示两方的队伍数量。
第二行给定 个正整数 表示 DarknessCatcher 每支队伍的“大跌”数量。
第三行给定 个正整数 表示 yxlxszx 每支队伍的“大跌”数量。
输出描述
输出所有情况中 DarknessCatcher 获胜的情况数,失败的情况数,平局的情况数。
示例1
输入:
2 0 2 1 3
输出:
0 1 1
说明:
所有情况为:
此时 DarknessCatcher 有一支队伍获胜,yxlxszx 有一支队伍获胜,平局。
此时 DarknessCatcher 没有队伍获胜,yxlxszx 有两支队伍获胜,DarknessCatcher 失败。
C++(g++ 7.5.0) 解法, 执行用时: 88ms, 内存消耗: 456K, 提交时间: 2022-12-16 19:57:06
#include<bits/stdc++.h> using namespace std; int a[110],b[110],c[110]; int main() { int n; cin>>n; for(int i=1;i<=n;i++)a[i]=i; for(int i=1;i<=n;i++)cin>>b[i]; for(int i=1;i<=n;i++)cin>>c[i]; int x=0,y=0,z=0,s; do{ s=0; for(int i=1;i<=n;i++){ if(b[i]>c[a[i]]) s++; else if(b[i]<c[a[i]]) s--; } if(s>0)x++; else if(s==0)z++; else y++; }while(next_permutation(a+1,a+1+n)); cout<<x<<" "<<y<<" "<<z<<'\n'; }
C++(clang++ 11.0.1) 解法, 执行用时: 136ms, 内存消耗: 512K, 提交时间: 2022-12-17 12:12:16
#include<bits/stdc++.h> using namespace std; int n,a[100],b[100]; int d,s,f,p,w,sum=1; int main() { cin>>n; for(int i=1;i<=n;i++) sum*=i; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) cin>>b[i]; while(w<sum){ d=0; w++; next_permutation(b+1,b+n+1); for(int i=1;i<=n;i++) { if(a[i]>b[i]) d++; if(a[i]<b[i]) d--; } if(d>0) s++; if(d==0) p++; if(d<0) f++; } cout<<s<<" "<<f<<" "<<p; return 0; }
pypy3 解法, 执行用时: 756ms, 内存消耗: 22864K, 提交时间: 2022-12-16 20:32:31
from itertools import permutations n = int(input()) a = list(map(int, input().split())) b = list(map(int, input().split())) win, draw, lose = 0, 0, 0 for p in permutations(b): cnt = 0 for i in range(n): if a[i] > p[i]: cnt += 1 elif a[i] < p[i]: cnt -= 1 if cnt > 0: win += 1 elif cnt == 0: draw += 1 else: lose += 1 print(win, lose, draw)