zoukankan      html  css  js  c++  java
  • Codeforces Round #433 (Div. 2)【A、B、C、D题】

    题目链接:Codeforces Round #433 (Div. 2)

    codeforces 854 A. Fraction【水】

    题意:已知分子与分母的和,求分子小于分母的 最大的最简分数。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 int gcd(int a,int b){return b?gcd(b,a%b):a;}
     7 int n;
     8 int main() {
     9     int a, b;
    10     scanf("%d", &n);
    11     for(int i = n/2; i >= 1; --i)
    12         if(gcd(i, n-i)==1) {a = i, b = n-i; break;}
    13     printf("%d %d
    ", a, b);
    14     retur
    15ms

    codeforces 854 B. Maxim Buys an Apartment【水】

    题意:有标号1~n的n个公寓顺序排列在一条线,已知有k个公寓不为空 但不知道是哪k个,定义一个 空的 并且旁边至少有一个 非空的公寓 为好公寓,问最少和最多有几个 好公寓。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 int n, k;
     7 int main() {
     8     int a, b;
     9     scanf("%d %d", &n, &k);
    10     if(k >= n/3+1) {a = (n!=k); b = n-k;}
    11     else {a = (k!=0); b = k*2;}
    12     printf("%d %d
    ", a, b);
    13     return 0;
    14 }
    15ms

    codeforces 853 A. Planning【贪心+优先队列】

    题意:n个航班,原本顺序出发,现在已知前k分钟没有航班能出发,每个航班均只能延迟出发时间,已知每个航班延迟一分钟需要的花费,现在要你安排出发顺序,使得总花费最小。

    题解:用优先队列维护延迟时间最大值,贪心的对每个位置取队列中的最大值。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <queue>
     5 #include <algorithm>
     6 using namespace std;
     7 typedef long long ll;
     8 const int N = 3e5+5;
     9 int n, k;
    10 int c[N], a[N];
    11 priority_queue<pair<int, int> > q;
    12 ll ans, t;
    13 int main() {
    14     ans = t = 0;
    15     while(!q.empty()) q.pop();
    16     int i, j, x;
    17     scanf("%d %d", &n, &k);
    18     for(i = 1; i <= k+n; ++i) {
    19         if(i <= n) {
    20             scanf("%d", &x); t += x;
    21             q.push(make_pair(x, i));
    22         }
    23         if(i > k) {
    24             a[q.top().second] = i;
    25             t -= q.top().first; q.pop();
    26         }
    27         ans += t;
    28     }
    29     printf("%lld
    ", ans);
    30     for(i = 1; i < n; ++i)
    31         printf("%d ", a[i]);
    32     printf("%d
    ", a[n]);
    33     return 0;
    34 }
    187ms

    未完待补。。。

    codeforces 853 B. Jury Meeting【贪心】

    题意:有n+1个城市,0号为首都,1~n每个城市有一个人,现在要安排每个人去首都,并且所有人一起待上至少k天并且返回自己的城市(航班飞行时长为一天),给出m个航班信息(每个航班都是在 0号城市 与其他城市之间往返),求满足安排的最少花费。

    题解:将航班按时间排序后,贪心算所有人在第i天前出发的最小花费和第i天后返回的最小花费,最后前缀后缀扫一下。

     //因为各种细节问题WA。。QAQ

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #define CLR(a,b) memset((a),(b),sizeof((a)))
     6 using namespace std;
     7 typedef long long ll;
     8 const int N = 1e5+5;
     9 const int M = 1e6+5;
    10 const ll inf = 2e11+5;
    11 int n, m, k;
    12 struct node {
    13     int d, f, t, c;
    14     bool operator < (const node &r)const {
    15         return d < r.d;
    16     }
    17 }e[N];
    18 ll a[M], b[M];
    19 int d[N];
    20 int main() {
    21     int i, j, day = 0, u;
    22     ll ans = inf;
    23     CLR(a, 0); CLR(b, 0); CLR(d, 0);
    24     scanf("%d %d %d", &n, &m, &k);
    25     for(i = 1; i <= m; ++i) {
    26         scanf("%d%d%d%d", &e[i].d, &e[i].f, &e[i].t, &e[i].c);
    27         day = max(day, e[i].d);
    28     }
    29     int num = n, tt = 0;
    30     ll mi = 0;
    31     sort(e+1, e+1+m);
    32     for(i = 1; i <= m; ++i) {
    33         tt = e[i].d;
    34         if(u=e[i].f) {
    35             if(!d[u]) {
    36                 d[u] = e[i].c; num--;
    37                 if(!num) {
    38                     for(j = 1; j <= n ; ++j)a[tt] += d[j];
    39                     mi = a[tt];
    40                 }
    41             }
    42             else if(d[u] > e[i].c){
    43                 if(!num) {mi -= (d[u] - e[i].c); a[tt]=mi;}
    44                 d[u] = e[i].c;
    45             }
    46         }
    47     }
    48     if(num) {puts("-1"); return 0;}
    49     CLR(d, 0); num = n;
    50     for(i = m; i >= 1; --i) {
    51         tt = e[i].d;
    52         if(u=e[i].t) {
    53             if(!d[u]) {
    54                 d[u] = e[i].c; num--;
    55                 if(!num) {
    56                     for(j = 1; j <= n ; ++j)b[tt] += d[j];
    57                     mi = b[tt];
    58                 }
    59             }
    60             else if(d[u] > e[i].c){
    61                 if(!num) {mi -= (d[u] - e[i].c); b[tt]=mi;}
    62                 d[u] = e[i].c;
    63             }
    64         }
    65     }
    66     if(num) {puts("-1"); return 0;}
    67 
    68     for(i = 1; i <= day; ++i) {
    69         if(!a[i]) a[i] = a[i-1];
    70         else if(a[i-1]) a[i] = min(a[i], a[i-1]);
    71     }
    72     for(i = day; i >= 1; --i) {
    73         if(!b[i]) b[i] = b[i+1];
    74         else if(b[i+1]) b[i] = min(b[i], b[i+1]);
    75     }
    76 
    77     //for(i = 1; i <= day; ++i) printf("%d ",a[i]);puts("");
    78     //for(i = day; i >= 1; --i) printf("%d ",b[i]);puts("");
    79 
    80     for(i = 1; i <= day; ++i)
    81         if(a[i] && i+1+k <= day && b[i+1+k])
    82             ans = min(ans, a[i]+b[i+1+k]);
    83     if(ans<inf) printf("%lld
    ", ans);
    84     else puts("-1");
    85     return 0;
    86 }
    93ms
  • 相关阅读:
    Oracle 导入导出 创建用户等
    如何导出 Windows EventLog
    QT connect 的信号,不能写类名
    Easylogging
    Openstack Swift SLO & bulk delete 测试常用命令,文件等
    Openstack Swift Static Large Object (SLO)
    Linux 创建指定大小的文件
    Openstack Swiftclient 查看 log
    Openstack Swift 批量删除 (bulk delete)
    winsock server 示例代码中 shutdown 的选项
  • 原文地址:https://www.cnblogs.com/GraceSkyer/p/7487791.html
Copyright © 2011-2022 走看看