1. 程式人生 > >2018 Multi-University Training Contest 6 Solution

2018 Multi-University Training Contest 6 Solution

first all aps 圖片 utl name nba image c++

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 }
View Code

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 }
View Code

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 }
View Code

2018 Multi-University Training Contest 6 Solution