其他分享
首页 > 其他分享> > USACO 2022 January Bronze 比赛题解

USACO 2022 January Bronze 比赛题解

作者:互联网

T1 Herdle(牧群)
T2 Non-Transitive Dice (非传递骰子)
众所周知,每一次打开题目,我们都要注意 数据范围

emmm……

$1\le T\le 10$

并且,我们要枚举的这个骰子是一个 四面骰子,而每一面上的数字 仅仅是 $1\sim 10$

考虑深搜。

每次从 $1\sim 10$ 里选一个数字,如此执行 $4$ 次,时间复杂度为 $O(10^4\times T)$,完全可以通过

再来分析一下 判定函数
举个栗子,
$A=\{4,5,6,7\}$
$B=\{2,4,5,10\}$

其中,有:
$A_1>B_1,A_2>B_1,A_3>B_1\dots$

合起来,
序列 $A$ 中的数字大于 $B$ 的有 $9$ 次
序列 $B$ 中的数字大于 $A$ 的则有 $5$ 次

因此,我们就说 $A$ 能战胜 $B$

由此,可得出以下程序:

 1 bool check(int x[],int y[]) //计算x能否赢y
 2 {
 3     int cntx=0,cnty=0;
 4     for(int i=1;i<5;i++)
 5     {
 6         for(int j=1;j<5;j++)
 7         {
 8             if(x[i]>y[j])
 9                 ++cntx;
10             else if(x[i]<y[j])
11                 ++cnty;
12         }
13     }
14     return cntx>cnty;
15 }
Check函数

至此,这题完全结束。


下面给出 完整代码

Code:

 1 #include<bits/stdc++.h>
 2 #define isdight(c) (c>='0'&&c<='9')
 3 using namespace std;
 4 int t,a[5],b[5],c[5],flag=0;
 5 inline int read() //快读
 6 {
 7     int x=0,f=1;
 8     char c=getchar();
 9     while(!isdight(c))
10         f=(c^'-'?1:-1),c=getchar();
11     while(isdight(c))
12         x=(x<<1)+(x<<3)+(c-'0'),c=getchar();
13     return x*f;
14 }
15 bool check(int x[],int y[]) //计算x能否赢y
16 {
17     int cntx=0,cnty=0;
18     for(int i=1;i<5;i++)
19     {
20         for(int j=1;j<5;j++)
21         {
22             if(x[i]>y[j])
23                 ++cntx;
24             else if(x[i]<y[j])
25                 ++cnty;
26         }
27     }
28     return cntx>cnty;
29 }
30 void dfs(int dep) //核心部分
31 {
32     if(dep>4)
33     {
34         if((check(a,b)&&check(b,c)&&check(c,a))||(check(b,a)&&check(a,c)&&check(c,b))) //满足非传递性
35             flag=1;
36         return;
37     }
38     if(flag)
39         return;
40     for(int i=1;i<11;i++) //递归
41     {
42         c[dep]=i;
43         dfs(dep+1);
44     }
45 }
46 int main()
47 {
48     t=read();
49     while(t--)
50     {
51         flag=0;
52         for(int i=1;i<5;i++)
53             a[i]=read();
54         for(int i=1;i<5;i++)
55             b[i]=read();
56         sort(a+1,a+5);
57         sort(b+1,b+5);
58         //排序,预处理
59         dfs(1);
60         if(flag)
61             puts("yes");
62         else
63             puts("no");
64     }
65     return 0;
66 }
T2 完整代码

T3 Drought(干旱)

标签:10,int,题解,USACO,&&,January,check,cnty,cntx
来源: https://www.cnblogs.com/CANTOR-SORT/p/15855099.html