2018 Multi-University Training Contest 6 Solution

A - oval-and-rectangle

题意:给出一个椭圆的a 和 b,在$[0, b]中随机选择c$ 使得四个顶点在椭圆上构成一个矩形,求矩形周长期望

思路:求出每种矩形的周长,除以b(积分)

 1 #include<bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 const double PI = acos(-1.0);
 6
 7 double a, b;
 8
 9 void RUN()
10 {
11     int t;
12     scanf("%d", &t);
13     while (t--)
14     {
15         scanf("%lf %lf", &a, &b);
16         double ans = 2 * b + a * PI;
17         printf("%.6f\n", ans - 5e-7);
18     }
19 }
20
21 int main()
22 {
23 #ifdef LOCAL_JUDGE
24     freopen("Text.txt", "r", stdin);
25 #endif // LOCAL_JUDGE
26
27     RUN();
28
29 #ifdef LOCAL_JUDGE
30     fclose(stdin);
31 #endif // LOCAL_JUDGE
32     return 0;
33 }

B - bookshelf

留坑。

C - Ringland

留坑。

D - Shoot Game

留坑。

E - black-and-white

留坑。

F - foam-transformation

留坑。

G - Variance-MST

留坑。

H - Rectangle Outline

留坑。

I - Werewolf

题意:狼人杀游戏,每个人都会指明另一个人的身份,村民一定不会说谎,狼人可能说谎,求确定的村民和狼人

思路:若果全都是狼人,那么逻辑一定成立,所以确定的村民数量为0.对于狼人可以通过反证法证明,若1认为2是村民,2认为3为村民,3认为4为村民,4认为2为狼人,反证法得出12位狼人,以此类推,DFS一下即可

 1 #include<bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 const int maxn = (int)1e5 + 10;
 6
 7 int n;
 8 int ans1,ans2;
 9 int fa[maxn];
10 char str[110];
11 vector<pair<int, int> >wolf;
12 vector<int>human[maxn];
13
14 void Init(int n)
15 {
16     ans1 = ans2 = 0;
17     for (int i = 0; i <= n; ++i) fa[i] = i, human[i].clear();
18     wolf.clear();
19 }
20
21 int find(int x)
22 {
23     return x == fa[x] ? fa[x] : fa[x] = find(fa[x]);
24 }
25
26 void mix(int x, int y)
27 {
28     x = find(x), y = find(y);
29     if (x != y)
30     {
31         fa[x] = y;
32     }
33 }
34
35 bool same(int x, int y)
36 {
37     return find(x) == find(y);
38 }
39
40 void DFS(int u)
41 {
42     for (auto it : human[u])
43     {
44         ++ans2;
45         DFS(it);
46     }
47 }
48
49 void RUN()
50 {
51     int t;
52     scanf("%d", &t);
53     while (t--)
54     {
55         scanf("%d", &n);
56         Init(n);
57         for (int i = 1; i <= n; ++i)
58         {
59             int u;
60             scanf("%d %s", &u, str);
61             if (str[0] == ‘v‘)
62             {
63                 mix(i, u);
64                 human[u].push_back(i);
65             }
66             else
67             {
68                 wolf.push_back(make_pair(i, u));
69             }
70         }
71         for (auto it : wolf)
72         {
73             if (same(it.first, it.second))
74             {
75                 ++ans2;
76                 DFS(it.second);
77             }
78         }
79         printf("%d %d\n", ans1, ans2);
80     }
81 }
82
83 int main()
84 {
85 #ifdef LOCAL_JUDGE
86     freopen("Text.txt", "r", stdin);
87 #endif // LOCAL_JUDGE
88
89     RUN();
90
91 #ifdef LOCAL_JUDGE
92     fclose(stdin);
93 #endif // LOCAL_JUDGE
94     return 0;
95 }

J - Chopping hands

留坑。

K - sacul

留坑。

L - Pinball

题意:一个小球垂直下落在一个斜板上,求在斜板上弹几次

思路:分解小球运动(物理题)

 1 #include<bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 const double g = 9.8;
 6 double a, b, x, y;
 7
 8 void RUN()
 9 {
10     int t;
11     scanf("%d", &t);
12     while (t--)
13     {
14         scanf("%lf %lf %lf %lf", &a, &b, &x, &y);
15         x = -1.0 * x;
16         double Tan = b / a;
17         double arc = atan(Tan);
18         double vx = g * sin(arc);
19         double vy = g * cos(arc);
20         double h = (y - b / a * x) * cos(arc);
21         double dis = (y - b / a * x) * sin(arc) + x / cos(arc);
22         double t = sqrt(2 * dis / vx );
23         double per = sqrt(2 * h / vy);
24         int ans = 0;
25         if (t > per)
26         {
27             ans++;
28             t -= per;
29         }
30         ans += t / (per * 2);
31         printf("%d\n", ans);
32     }
33 }
34
35 int main()
36 {
37 #ifdef LOCAL_JUDGE
38     freopen("Text.txt", "r", stdin);
39 #endif // LOCAL_JUDGE
40
41     RUN();
42
43 #ifdef LOCAL_JUDGE
44     fclose(stdin);
45 #endif // LOCAL_JUDGE
46     return 0;
47 }

原文地址:https://www.cnblogs.com/Dup4/p/9750536.html

时间: 2024-07-31 21:08:10

2018 Multi-University Training Contest 6 Solution的相关文章

2018 Multi-University Training Contest 1 Solution

A - Maximum Multiple 题意:给出一个n 找x, y, z 使得$n = x + y +z$ 并且 $n \equiv 0 \pmod x, n \equiv 0 \pmod y, n \equiv 0 \pmod z$ 并且使得 $x \cdot y \cdot z$ 最大 思路:设$a = \frac{n}{x}, b = \frac{n}{y}, c = \frac{n}{z}$ 那么 $\frac{1}{a} + \frac{1}{b} + \frac{1}{c} =

2018 Multi-University Training Contest 4 Solution

A - Problem A. Integers Exhibition 留坑. B - Problem B. Harvest of Apples 题意:计算$\sum_{i = 0}^{i = m}C(n, i)$ 思路:由$sum_{i = 0}^{i = m}C(n,i)$可以得到$sum_{i = 0}^{i = m + 1}C(n,i)$以及$sum_{i = 0}^{i = m}C(n + 1,i)$然后用莫对算法求解 1 #include<bits/stdc++.h> 2 3 usi

2018 Multi-University Training Contest 9 Solution

A - Rikka with Nash Equilibrium 题意:构造一个$n * m$的矩阵,使得$[1, n * m]$ 中每个数只出现一次,并且纳什均衡只出现一次. 思路:从大到小的放置,每一个都可以拓展一行拓展一列或者放在已经拓展的行列焦点,用记忆化搜索/dp即可 1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 typedef long long ll; 6 7 int n, m; 8 ll p; 9 ll dp[81]

2018 Nowcoder Multi-University Training Contest 2

Practice Link A. run 题意: 白云每次可以移动\(1\)米或者\(k\)米,询问移动的米数在\([L, R]\)范围内的方案数有多少. 思路: \(dp[i][2]\)表示到第\(i\)米,是通过\(1\)米的方式过来的还是\(k\)米的方式过来的,递推即可. 代码: #include <bits/stdc++.h> using namespace std; #define N 100010 const int p = 1e9 + 7; int f[N][2], g[N];

2018 Nowcoder Multi-University Training Contest 1

Practice Link J. Different Integers 题意: 给出\(n\)个数,每次询问\((l_i, r_i)\),表示\(a_1, \cdots, a_i, a_j, \cdots, a_n\)中有多少个不同的数. 思路: 先分别离线求出\(a_1, \cdots a_i\)以及\(a_j, \cdots, a_n\)中有多少个不同的数. 再考虑有多少个数既在\([1, i]\)中也在\([j, n]\)中,再离线做一次. 考虑一个数第一次出现的时候,那么这个数下一次出现

2018 Nowcoder Multi-University Training Contest 5

Practice Link A. gpa 题意: 有\(n\)门课程,每门课程的学分为\(s_i\),绩点为\(c_i\),要求最多删除\(k\)门课程,使得gpa最高. gpa计算方式如下: \[ \begin{eqnarray*} gpa = \frac{\sum s_ic_i}{\sum s_i} \end{eqnarray*} \] 思路: 首先删去的课程越多,gpa肯定不会变得更差. 所以我们肯定是删去\(k\)门课程. 考虑二分答案,check的时候要满足: \[ \begin{eq

2018 Multi-University Training Contest 3

2018 Multi-University Training Contest 2 题解 A - Problem A. Ascending Rating 题目描述:给定一个序列,分别求出所有长度为\(m\)的区间的\(maxrating, count\),对于每个长度为\(m\)的区间,一开始\(maxrating=-1, count=0\),然后从左往右扫,扫到一个大于\(maxrating\)的值时,\(count+1, maxrating=\)那个数. solution 从左往右做,用单调队

HDU 2018 Multi-University Training Contest 3 Problem A. Ascending Rating 【单调队列优化】

任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6319 Problem A. Ascending Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 5943    Accepted Submission(s): 2004 Problem Description Before

杭电2018多校第一场(2018 Multi-University Training Contest 1) 1001.Maximum Multiple (HDU6298)-数学思维题(脑子是个好东西,可惜我没有)

暑假杭电多校第一场,这一场是贪心场,很多贪心的题目,但是自己太菜,姿势挫死了,把自己都写吐了... 2018 Multi-University Training Contest 1 HDU6298.Maximum Multiple 题目意思就是给你一个n,找出来三个数x,y,z, 使得n=x+y+z,而且x,y,z都是n的因数,并且x*y*z为最大值,让你输出来x*y*z的最大值.如果没有满足条件的情况就输出-1. 由1=1/2+1/3+1/6=1/3+1/3+1/3=1/2+1/4+1/4,所