zoukankan      html  css  js  c++  java
  • 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
    ");
    20         }
    21         else{
    22             printf("EASY
    ");
    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
    ");
    18             }
    19             else{
    20                 printf("NO
    ");
    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
    ");
    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
    ");
    59         }
    60         else{
    61             printf("NO
    ");
    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
    ");
    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
    ");
    60             printf("%lld %lld
    ", x1, y1);
    61             printf("%lld %lld
    ", x2, y2);
    62             printf("%lld %lld
    ", x3, y3);
    63         }
    64     }
    65 
    66     return 0;
    67 }
    View Code
  • 相关阅读:
    python's is&==区别
    python's decorator&wrapper
    objects & values & types
    linux sort命令
    partial function
    proc文件系统
    readlink 获取当前进程对应proc/self/exe
    Workgroup&Domain(Realm)
    python传值&值引用
    Unpacking Argument Lists
  • 原文地址:https://www.cnblogs.com/wyboooo/p/9703486.html
Copyright © 2011-2022 走看看