codeforces#512 Div2

pre过了三题 终测又挂了一题 又掉分了 真的是 太菜了

 

A-In Search of an Easy Problem

水题 有一个1就是hard

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long int ll;
 4 
 5 int n;
 6 
 7 int main()
 8 {
 9     while(scanf("%d", &n) != EOF){
10         int easy;
11         bool flag = false;
12         for(int i = 0; i < n; i++){
13             scanf("%d", &easy);
14             if(easy == 1){
15                 flag = true;
16             }
17         }
18         if(flag){
19             printf("HARD\n");
20         }
21         else{
22             printf("EASY\n");
23         }
24     }
25     return 0;
26 }
View Code

 

 

B-Vasya and Cornfield

求一下四条边的直线方程 代入点判断即可

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long int ll;
 4 
 5 int n, d, m;
 6 struct node{
 7     int x, y;
 8 };
 9 
10 int main()
11 {
12     while(scanf("%d%d%d", &n, &d, &m) != EOF){
13         for(int i = 0; i < m; i++){
14             int x, y;
15             scanf("%d%d", &x, &y);
16             if(y >= -x + d && y <= -x + 2 * n - d && y >= x - d && y <= x + d){
17                 printf("YES\n");
18             }
19             else{
20                 printf("NO\n");
21             }
22         }
23     }
24     return 0;
25 }
View Code

 

C-Vasya and Golden Ticket

终测挂了的题

求前缀和 对于每一个i看sum[n]是sum[i]的几倍 然后看i之后有没有1-k倍的sum[i]

挂了是因为没判断每个倍数都有 找到一个就输出了

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long int ll;
 4 
 5 int n;
 6 char s[105];
 7 int presum[105];
 8 
 9 int main()
10 {
11     while(scanf("%d", &n) != EOF){
12         memset(presum, 0, sizeof(presum));
13         scanf("%s", s + 1);
14         for(int i = 1; i <= n; i++){
15             int t = s[i] - '0';
16             presum[i] = presum[i - 1] + t;
17         }
18 
19         bool flag = false;
20         if(presum[n] == 0){
21             printf("YES\n");
22             continue;
23         }
24         //cout<<presum[n]<<endl;
25         for(int i = 1; i <= n; i++){
26             if(presum[i] == 0){
27                 continue;
28             }
29             if(presum[n] % presum[i]){
30                 continue;
31             }
32             else{
33                 int k = presum[n] / presum[i];
34                 if(k == 2){
35                     flag = true;
36                     break;
37                 }
38                 int t = 2;
39                 for(int j = i + 1; j <= n; j++){
40                     if(presum[j] == (t) * presum[i]){
41                         //cout<<k<<endl;
42                         //cout<<i<<" "<<presum[i]<<endl;
43                         //cout<<j<<" "<<presum[j]<<" "<<endl;
44                         t++;
45                     }
46                     if(k == t){
47                         flag = true;
48                         break;
49                     }
50                 }
51                 if(flag){
52                     break;
53                 }
54             }
55         }
56 
57         if(flag){
58             printf("YES\n");
59         }
60         else{
61             printf("NO\n");
62         }
63     }
64     return 0;
65 }
View Code

 

 

D-Vasya and Triangle

三角形公式S=(1/2)*(x1y2*1+x2y3*1+x3y1*1-x1y3*1-x2y1*1-x3y2*1) =1/2[x1(y2-y3)+x2(y3-y1)+x3(y1-y2)]

当2*n*m/k不是整数时一定没有解

有一个点一定是原点 否则一定可以将这个三角形平移到原点

剩下两个点一个点的横坐标和另一个点的纵坐标一定是0 因为这样就已经足够取尽n*m/2中的所有整数了

接下来就是如何凑出x2和y3了 使得x2 * y3 = 2 * n * m / k

应该想到的是gcd 

假设a = gcd(2 * n, k) 那么S = (2 * n / a) * m / (k / a)

将他们分配一下 x2 = (2 * n / a), y3 = (m * a / k)

如果x2 或 y3超出范围限制了 就考虑把2这个系数挪一下就好了

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long int LL;
 4 
 5 LL n, m, k;
 6 
 7 LL gcd(LL a, LL b)
 8 {
 9     if(b == 0)return a;
10     return gcd(b, a % b);
11 }
12 
13 int main()
14 {
15     while(scanf("%lld%lld%lld", &n, &m, &k) != EOF){
16         if((2 * n * m) % k){
17             printf("NO\n");
18         }
19         else{
20             LL x1, x2, x3, y1, y2, y3;
21             x1 = 0ll; y1 = 0ll; x3 = 0ll; y2 = 0ll;
22             LL a = gcd(2 * n, k);
23             //cout<<a<<endl;
24             y3 = a * m / k;
25             x2 = 2 * n / a;
26             //cout<<x2<<" "<<y3<<endl;
27             if(x2 > n || y3 > m){
28                 y3 *= 2;
29                 x2 /= 2;
30             }
31             /*if(n % k == 0){
32                 y3 = m;
33                 x2 = 2 * n / k;
34             }
35             else if(m % k == 0){
36                 x2 = n;
37                 y3 = 2 * m / k;
38             }
39             else{
40                 /*int a = n / gcd(n, k);
41                 int b = m / gcd(m, k);
42                 if(a * 2 < n){
43                     x2 = a * 2;
44                     y3 = b;
45                 }
46                 else if(a * 2 < m){
47                     y3 = a * 2;
48                     x2 = b;
49                 }
50                 else if(b * 2 < n){
51                     x2 = b * 2;
52                     y3 = a;
53                 }
54                 else if(b * 2 < m){
55                     y3 = b * 2;
56                     x2 = a;
57                 }
58             }*/
59             printf("YES\n");
60             printf("%lld %lld\n", x1, y1);
61             printf("%lld %lld\n", x2, y2);
62             printf("%lld %lld\n", x3, y3);
63         }
64     }
65 
66     return 0;
67 }
View Code

 

posted @ 2018-09-25 20:59  wyboooo  阅读(130)  评论(0)    收藏  举报