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
  • 相关阅读:
    【Codechef】Chef and Bike(二维多项式插值)
    USACO 完结的一些感想
    USACO 6.5 Checker Challenge
    USACO 6.5 The Clocks
    USACO 6.5 Betsy's Tour (插头dp)
    USACO 6.5 Closed Fences
    USACO 6.4 Electric Fences
    USACO 6.5 All Latin Squares
    USACO 6.4 The Primes
    USACO 6.4 Wisconsin Squares
  • 原文地址:https://www.cnblogs.com/lr599909928/p/12685908.html
Copyright © 2011-2022 走看看