zoukankan      html  css  js  c++  java
  • Codeforces Educational Rounds 85 A~C

    A:Level Statistics

    题意:统计n个游戏数据,p代表游玩次数,c代表通关次数,每次游玩都不一定通关,求这些数据是否合法

    题解:1.游玩次数不能小于通关次数   2.游玩次数和通关次数必须单增  3.每次增加的游玩次数不能小于通关次数

    代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <stack>
     7 #include <queue>
     8 #include <vector>
     9 #include <map>
    10 #include <set>
    11 #include <unordered_set>
    12 #include <unordered_map>
    13 #define ll long long
    14 #define fi first
    15 #define se second
    16 #define pb push_back
    17 #define me memset
    18 const int N = 1e6 + 10;
    19 const int mod = 1e9 + 7;
    20 using namespace std;
    21 typedef pair<int,int> PII;
    22 typedef pair<long,long> PLL;
    23 
    24 int t;
    25 int n;
    26 int p,c,mp=0,mc=0,tp=0,tc=0;
    27 
    28 int main() {
    29     ios::sync_with_stdio(false);
    30     cin>>t;
    31     while(t--){
    32         tp=0,tc=0;
    33         bool flag=1;
    34         cin>>n;
    35         for(int i=0;i<n;++i){
    36             cin>>p>>c;
    37             if(i==0) tp=p,tc=c;
    38             if(p<tp || c<tc || (p==tp && c>tc) || p<c || (p-tp<c-tc)){
    39                 flag=0;
    40             }
    41             tp=p;
    42             tc=c;
    43         }
    44         if(flag==0) printf("NO\n");
    45         else printf("YES\n");
    46     }
    47 
    48     return 0;
    49 }
    View Code

    B. Middle Class

    题意:定义每人拥有的钱不小于x时为富人,现在有n个人,可以选(1<=x<=n)个人出来将他们的财产平分给所有人,求最多能有多少富人

    题解:对每个人拥有的钱排个序,然后贪心,从最有钱的人开始往前遍历,记录一个最大值即可

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <stack>
     7 #include <queue>
     8 #include <vector>
     9 #include <map>
    10 #include <set>
    11 #include <unordered_set>
    12 #include <unordered_map>
    13 #define ll long long
    14 #define fi first
    15 #define se second
    16 #define pb push_back
    17 #define me memset
    18 const int N = 1e6 + 10;
    19 const int mod = 1e9 + 7;
    20 using namespace std;
    21 typedef pair<int,int> PII;
    22 typedef pair<long,long> PLL;
    23  
    24 int t;
    25 int n;
    26 long double x,sum[N];
    27 int ans=0;
    28 long double a[N];
    29 int main() {
    30     ios::sync_with_stdio(false);
    31     cin>>t;
    32      while(t--){
    33         cin>>n>>x;
    34         ans=0;
    35          for(int i=0;i<n;++i){
    36              cin>>a[i];
    37          }
    38         sort(a,a+n);
    39          for(int i=n-1;i>=0;--i){
    40              sum[n-i]=sum[n-i-1]+a[i];
    41          }
    42         for(int i=1;i<=n;++i){
    43             long double tmp=sum[i]/i;
    44             if(tmp>=x){
    45                 ans=max(ans,i);
    46             }
    47         }
    48         printf("%d\n",ans);
    49      }
    50  
    51  
    52  
    53     return 0;
    54 }
    View Code

    C. Circle of Monsters

    题意:有n个怪物围成一个圈,每次攻击可以对怪物造成一点伤害,当第i个怪物扑街后会对后面一个(n的后面是1)怪物造成b[i]点伤害(如果i+1个怪物存活的话),求最少攻击多少次能将怪物全部消灭

    题解:枚举每个怪物受到前一个怪物的阵亡伤害,然后按顺序遍历一边求个最小值就行了(建议用scanf和pritnf,容易T)

    代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <stack>
     7 #include <queue>
     8 #include <vector>
     9 #include <map>
    10 #include <set>
    11 #include <unordered_set>
    12 #include <unordered_map>
    13 #define ll long long
    14 #define fi first
    15 #define se second
    16 #define pb push_back
    17 #define me memset
    18 const int N = 1e6 + 10;
    19 const int mod = 1e9 + 7;
    20 using namespace std;
    21 typedef pair<int,int> PII;
    22 typedef pair<long,long> PLL;
    23  
    24 int t;
    25 ll n,a[N],b[N],c[N];
    26 ll sum;
    27 ll ans=1e18+10;
    28 int main() {
    29     scanf("%d",&t);
    30     while(t--){
    31         scanf("%lld",&n);
    32         ans=1e18+10;
    33         sum=0;
    34         for(int i=1;i<=n;++i){
    35             scanf("%lld %lld",&a[i],&b[i]);
    36             if(i>1) c[i]=max((ll)0,a[i]-b[i-1]);
    37         }
    38         c[1]=max((ll)0,a[1]-b[n]);
    39         if(n==1){
    40             printf("%lld\n",a[1]);
    41             continue;
    42         }
    43         for(int i=1;i<=n;++i){
    44            sum+=c[i];
    45         }
    46         for(int i=1;i<=n;++i){
    47             ans=min(ans,a[i]+sum-c[i]);
    48         }
    49         printf("%lld\n",ans);
    50     }
    51  
    52     return 0;
    53 }
    View Code
  • 相关阅读:
    迪杰斯特拉_优先队列 模板
    POJ3268(Dijkstra_邻接矩阵)
    Uva-10815
    Uva-10474
    同余方程
    欧几里得算法与扩展欧几里得算法
    大整数型的加法
    Uva442
    《哲学起步》读后感 读书笔记
    《论大战略》读后感 读书笔记
  • 原文地址:https://www.cnblogs.com/lr599909928/p/12685908.html
Copyright © 2011-2022 走看看