zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 97 (Rated for Div. 2) (已自闭)

    我好菜啊。。

    明明感觉都很简单,为什么当时没想出来呢?

    A. Marketing Scheme

    题意:给出一段从L到R的区间,能否找出一个x数,使得区间任意的一个数mod x>=x/2.

    一个数能取模最大的就是其本身,所以让一个数 a mod x 最大,应该让 x>a 说以我们让x取r+1,即L到R区间所有数都为其本身

    如果让区间内任意一个数a mod x>=x/2,即判断区间内最小的数L mod x>=x/2 

    #include <iostream>
    using namespace std;
    int t,l,r;
    int main(){
        cin>>t;
        while(t--){
            cin>>l>>r;
            if((r+1)/2.0<=l){
                cout<<"YES"<<endl;
            }else{
                cout<<"NO"<<endl;
            }
        }
    }

    B. Reverse Binary Strings

    题意,由偶数个数量相等0和1组成的字符串,反向其中任意字串,问最少反向几次能得到010101...或101010...这样的字符串

    统计字符串中字串01的个数,和10的个数,从中取max,即字符串中不需反向的个数,用其(总串-不需反向的个数)/2即可

    #include <iostream>
    #include <string>
    using namespace std;
    typedef long long ll;
    int t,n;
    string s;
    int main(){
        cin>>t;
        while(t--){
            cin>>n;
            cin>>s;
            int cnt1=0,cnt2=0,ans=0;
            for(int i=0;i+1<s.size();i++){
                if(s[i]=='1'&&s[i+1]=='0'){
                    cnt1++;
                }
                if(s[i]=='0'&&s[i+1]=='1'){
                    cnt2++;
                }
            }
            ans=max(cnt1,cnt2);
            cout<<(n-ans*2)/2<<endl;
        }
    }
    

      

     C. Chef Monocarp

    首先给上菜时间排个序,暴力每个时间节点选择是选择取菜还是不取菜,最后加上记忆化搜索

    #include <iostream>
    #include <algorithm>
    #include <string>
    using namespace std;
    typedef long long ll;
    int t,n;
    int a[1000],dp[1000][1000];
    int dfs(int tim,int cur){
        if(cur==n+1){
            return 0;
        }
        if(tim==500){
            return 1e9;
        }
        if(dp[tim][cur]!=-1) return dp[tim][cur];
        int  ans=1e9;
        ans=min(ans,dfs(tim+1,cur+1)+abs(tim-a[cur]));
        ans=min(ans,dfs(tim+1,cur));
        //cout<<"ans="<<ans<<" "<<abs(tim-a[cur])<<endl;
        return dp[tim][cur]=ans;
    }
    int main(){
        cin>>t;
        while(t--){
            cin>>n;
            for(int i=1;i<=n;i++){
                cin>>a[i];
            }
            for(int i=0;i<=600;i++){
                for(int j=0;j<=n;j++){
                    dp[i][j]=-1;
                }
            }
            sort(a+1,a+1+n);
            cout<<dfs(1,1)<<endl;
        }
    }
    

      

    D. Minimal Height Tree

    模拟上层有多少节点,再统计这层有多少节点,递增的节点对上层能放一个节点上,当上层节点数用完,就将本层的节点数当上层,ans++,继续统计下层。

    #include <iostream>
    using namespace std;
    const int N=2e5+7;
    int t,n,a[N];
    int main(){
        cin>>t;
        while(t--){
            cin>>n;
            for(int i=1;i<=n;i++){
                cin>>a[i];
            }
            a[n+1]=-1;
            int cnt=0,now=1,ans=0;
            for(int i=2;i<=n;i++){
                cnt++;
                if(a[i]<a[i+1]){
                }else{
                    now--;
                }
                if(i==n&&now!=0){
                    ans++;
                }
                if(now==0){
                    ans++;
                    now=cnt;
                    cnt=0;
                }
            }
            cout<<ans<<endl;
        }
    }
    

      

  • 相关阅读:
    康拓展开
    P6032 选择客栈 加强版 递推
    0923考试T3 二进制,位运算
    0922考试T3 dfs序 lca 线段树 树上问题
    0921考试T2
    0922考试T1
    P3934 [Ynoi2016]炸脖龙I 树状数组 扩展欧拉定理
    0922考试T4 区间DP
    P6834 [Cnoi2020]梦原 树状数组 期望DP
    UVA1364 Knights of the Round Table Tarjan求点双联通分量+二分图染色
  • 原文地址:https://www.cnblogs.com/kksk/p/13890632.html
Copyright © 2011-2022 走看看