zoukankan      html  css  js  c++  java
  • Codeforces Round #280 (Div. 2)

    A - Vanya and Cubes

    代码:

     1 #include <bits/stdc++.h>
     2 #define pb push_back
     3 #define mp make_pair
     4 #define esp 1e-12
     5 #define lowbit(x) ((x)&(-x))
     6 #define lson   l, m, rt<<1
     7 #define rson   m+1, r, rt<<1|1
     8 #define sz(x) ((int)((x).size()))
     9 #define pb push_back
    10 #define pf(x) ((x)*(x))
    11 
    12 #define pi acos(-1.0)
    13 
    14 #define in freopen("solve_in.txt", "r", stdin);
    15 #define out freopen("solve_out.txt", "w", stdout);
    16 
    17 #define bug(x) printf("Line : %u >>>>>>
    ", (x));
    18 #define inf 0x0f0f0f0f
    19 using namespace std;
    20 typedef long long LL;
    21 typedef pair<int, int> PII;
    22 const int maxn = (int)1e4 + 100;
    23 LL f[maxn];
    24 int m;
    25 void pre(){
    26     LL sum = 0;
    27     m = 0;
    28     for(int i = 1; f[i] < (maxn); sum += i, i++){
    29         f[i] = f[i-1] + sum + i;
    30         m++;
    31     }
    32 }
    33 int main(){
    34   
    35     pre();
    36     int n;
    37     scanf("%d", &n);
    38     int ans = upper_bound(f+1, f+m+1, n)-f;
    39     cout << ans - 1 << endl;
    40 //    cout << f[5];
    41     return 0;
    42 }
    View Code

    B - Vanya and Lanterns

    分析:

    比较两端的灯向两边的照射长度,然后其他两个相邻灯之间距离的一半,取最大值。

    代码:

     1 #include <bits/stdc++.h>
     2 #define pb push_back
     3 #define mp make_pair
     4 #define esp 1e-12
     5 #define lowbit(x) ((x)&(-x))
     6 #define lson   l, m, rt<<1
     7 #define rson   m+1, r, rt<<1|1
     8 #define sz(x) ((int)((x).size()))
     9 #define pb push_back
    10 #define pf(x) ((x)*(x))
    11 
    12 #define pi acos(-1.0)
    13 
    14 #define in freopen("solve_in.txt", "r", stdin);
    15 #define out freopen("solve_out.txt", "w", stdout);
    16 
    17 #define bug(x) printf("Line : %u >>>>>>
    ", (x));
    18 #define inf 0x0f0f0f0f
    19 using namespace std;
    20 typedef long long LL;
    21 typedef pair<int, int> PII;
    22 const int maxn = 1111;
    23 int a[maxn];
    24 
    25 int main(){
    26 //    in
    27     int n, l;
    28     scanf("%d%d", &n, &l);
    29     for(int i = 1; i <= n; i++)
    30         scanf("%d", a+i);
    31     sort(a+1, a+n+1);
    32     n = unique(a+1, a+n+1)-a-1;
    33     double ans = max(a[1], l-a[n]);
    34     for(int i = 1; i < n; i++)
    35         ans = max(ans, (a[i+1]-a[i])/2.0);
    36     printf("%.12f
    ", ans);
    37     return 0;
    38 }
    View Code

    C - Vanya and Exams

    分析:考虑剩下还需要多少分。按bi从小到大选取。

    代码:

     1 #include <bits/stdc++.h>
     2 #define pb push_back
     3 #define mp make_pair
     4 #define esp 1e-12
     5 #define lowbit(x) ((x)&(-x))
     6 #define lson   l, m, rt<<1
     7 #define rson   m+1, r, rt<<1|1
     8 #define sz(x) ((int)((x).size()))
     9 #define pb push_back
    10 #define pf(x) ((x)*(x))
    11 
    12 #define pi acos(-1.0)
    13 
    14 #define in freopen("solve_in.txt", "r", stdin);
    15 #define out freopen("solve_out.txt", "w", stdout);
    16 
    17 #define bug(x) printf("Line : %u >>>>>>
    ", (x));
    18 #define inf 0x0f0f0f0f
    19 using namespace std;
    20 typedef long long LL;
    21 typedef pair<int, int> PII;
    22 const int maxn = (int)1e5 + 100;
    23 
    24 int a[maxn], b[maxn];
    25 struct Node {
    26     int a, b;
    27     bool operator < (const Node &o)const {
    28         return b < o.b;
    29     }
    30 } x[maxn];
    31 
    32 int main() {
    33 //    in
    34     int n, r, avg;
    35     scanf("%d%d%d", &n, &r, &avg);
    36     LL tot, sum = 0, ans = 0;
    37     for(int i = 0; i < n; i++) {
    38         scanf("%d%d", &x[i].a, &x[i].b);
    39         sum += x[i].a;
    40     }
    41     sort(x, x+n);
    42     sum = (LL)avg*n-sum;
    43     if(sum <= 0)
    44         puts("0");
    45     else {
    46         for(int i = 0; i < n; i++) {
    47             if(r-x[i].a <= sum) {
    48                 ans += (LL)x[i].b*(r-x[i].a);
    49                 sum -= (r-x[i].a);
    50             } else {
    51                 ans += (LL)sum*x[i].b;
    52                 break;
    53             }
    54         }
    55         printf("%I64d
    ", ans);
    56     }
    57     return 0;
    58 }
    View Code

    D - Vanya and Computer Game

    分析:二分法。找到最大的一个数m使得m/y+m/x < n,那么然后m+1能否整除y,x。

    解释是,每次hit增加一个一定是y,x中至少一个整除m,那么看谁能整除,最后一次hit就是谁贡献的。

    代码:

     1 #include <bits/stdc++.h>
     2 #define pb push_back
     3 #define mp make_pair
     4 #define esp 1e-12
     5 #define lowbit(x) ((x)&(-x))
     6 #define lson   l, m, rt<<1
     7 #define rson   m+1, r, rt<<1|1
     8 #define sz(x) ((int)((x).size()))
     9 #define pb push_back
    10 #define pf(x) ((x)*(x))
    11 
    12 #define pi acos(-1.0)
    13 
    14 #define in freopen("solve_in.txt", "r", stdin);
    15 #define out freopen("solve_out.txt", "w", stdout);
    16 
    17 #define bug(x) printf("Line : %u >>>>>>
    ", (x));
    18 #define inf 0x0f0f0f0f
    19 using namespace std;
    20 typedef long long LL;
    21 typedef pair<int, int> PII;
    22 int main() {
    23 //    in
    24     int x, y, n;
    25     scanf("%d%d%d", &n, &x, &y);
    26     swap(x, y);
    27     for(int i = 1; i <= n; i++) {
    28         int m;
    29         scanf("%d", &m);
    30 
    31         LL l = 0, r = (LL)1e18;
    32         LL mid;
    33         while(1) {
    34             mid = (l+r)>>1;
    35             if(mid/x+mid/y < m) {
    36                 if((mid+1)/x + (mid+1)/y >= m)
    37                     break;
    38                 else l = mid+1;
    39             } else r = mid-1;
    40         }
    41         l = mid;
    42         if((l+1)%x == 0 && (l+1)%y == 0)
    43             puts("Both");
    44         else if((l+1)%x == 0)
    45             puts("Vanya");
    46         else puts("Vova");
    47     }
    48     return 0;
    49 }
    View Code

    E - Vanya and Field

    分析:gcd(dx, n) = gcd(dy, n)知道从任意一点出发访问,一定会停止在原点,也就是原点是第一个重复点,而且总共访问n个点,这n个点的x,y坐标是能够分别覆盖0,1, n-1的,有了这个的话,我们可以假定从原点出发,到达每一行x时,相应的y的坐标,那么出发点相对原点向上移动一个单位,到达每一行的时y坐标也向上移动一个坐标。然后对于每个位置的苹果树,算出可以访问该点的(x = 0, y)的坐标,,最后看哪个y坐标上出发访问的点最多,输出0 y。

    代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = (int)1e6 + 100;
     4 int pos[maxn], ans[maxn];
     5 
     6 
     7 int main(){
     8     int n, m, dx, dy;
     9     scanf("%d%d%d%d", &n, &m, &dx, &dy);
    10     if(n == 1){
    11         for(int i = 0; i < m; i++){
    12             int x, y;
    13             scanf("%d%d", &x, &y);
    14         }
    15         puts("0 0");
    16     }
    17     else{
    18     int sx = 0, sy = 0;
    19     while(1){
    20         pos[sx] = sy;
    21         sx = (sx+dx)%n;
    22         sy = (sy+dy)%n;
    23         if(sx == 0 && sy == 0) break;
    24         }
    25       for(int i = 0; i < m; i++){
    26         int x, y;
    27         scanf("%d%d", &x, &y);
    28         ans[(y-pos[x]+n)%n]++;
    29         }
    30         int t = max_element(ans, ans+n)-ans;
    31         cout << 0 << ' ' << t << endl;
    32     }
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    树形DP
    区间DP
    洛谷P1462 通往奥格瑞玛的道路
    缓存--Redis
    Flack--SQLAlchemy
    Flask--WTForms
    Flask框架
    通过反射,获取linkedHashMap的最后一个键值对。对map按照值进行排序。
    Comparable和Comparator的使用
    构造函数,构造代码块,静态函数的执行顺序
  • 原文地址:https://www.cnblogs.com/rootial/p/4137889.html
Copyright © 2011-2022 走看看