zoukankan      html  css  js  c++  java
  • NOIP模拟1

     期望得分:100+100+100=300

    实际得分:94+96+97=287

    T1  #6090. 「Codeforces Round #418」尘封思绪

    #include<cstdio>
    #define N 102 
    using namespace std;
    int a[N],b[N];
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        if(m>1) { printf("Yes"); return 0; }
        if(!m)
        {
            for(int i=1;i<=n;i++) 
            if(a[i]<a[i-1]) { printf("Yes"); return 0; }
            printf("No"); return 0;
        } 
        int pos;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            if(!a[i]) { pos=i; continue;}
            if(a[i]<a[i-1]) { printf("Yes"); return 0; }
        }    
        scanf("%d",&m);
        a[n+1]=201;
        if(m<a[pos-1] || m>a[pos+1]) { printf("Yes"); return 0; }
        printf("No");
    }
    View Code

    T1 #6091. 「Codeforces Round #418」幻想特快

    #include<cstdio>
    #define N 1001
    using namespace std;
    int a[N],b[N];
    int p[3],fa,fb;
    int v[N];
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++) 
        {
            scanf("%d",&a[i]);
            if(!v[a[i]]) v[a[i]]=i;
            else fa=i;
        }
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&b[i]);
            if(a[i]!=b[i]) p[++p[0]]=i;
        }
        int k;
        for(int i=1;i<=n;i++)
                if(!v[i]) { k=i; break; }
        if(p[0]==1)
        {
            a[p[1]]=k;
            for(int i=1;i<=n;i++) printf("%d ",a[i]);
            return 0; 
        }
        if(b[fa]==k) a[fa]=k;
        else a[v[a[fa]]]=k;
        for(int i=1;i<=n;i++) printf("%d ",a[i]);
    }
    View Code

    T3  LOJ #6092. 「Codeforces Round #418」恋爱循环


    法一: 尺取法

    #include<cstdio>
    #include<algorithm>
    #define N 1501
    using namespace std;
    char s[N];
    int main()
    {
        int n,q;
        scanf("%d",&n);
        scanf("%s",s+1);
        scanf("%d",&q);
        int l,r,now,ans,m;
        char c[2];
        while(q--)
        {
            scanf("%d%s",&m,c);
            now=ans=0;
            r=0,l=1;
            while(1)
            {
                while(r<=n && now<=m) 
                    if(s[++r]!=c[0])  now++;
                ans=max(ans,r-l);
                if(r>=n) break; 
                while(l<=n && now>m) 
                    if(s[l++]!=c[0]) now--;
            }
            printf("%d
    ",ans);
        }
    } 
    View Code

    法二:动态规划

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define N 1501
    using namespace std;
    char s[N];
    int ans[26][N];
    int main()
    {
        int n,sum;
        scanf("%d",&n);
        scanf("%s",s+1);
        for(int k=0;k<26;k++)
        {
            for(int i=1;i<=n;i++)
            {
                sum=0;
                for(int j=i;j<=n;j++)
                {
                    if(s[j]-'a'!=k) sum++;
                    ans[k][sum]=max(ans[k][sum],j-i+1);
                }
            }
            for(int i=1;i<=n;i++) ans[k][i]=max(ans[k][i],ans[k][i-1]);    
        }
        int q;
        scanf("%d",&q);
        int m; char c[2];
        while(q--)
        {
            scanf("%d%s",&m,c);
            printf("%d
    ",ans[c[0]-'a'][m]);
        }
    }
    View Code

    考场做法:二分 TLE1个点

    #include<cstdio>
    #include<iostream>
    #define N 1501
    using namespace std;
    char s[N],c[2];
    int n,m;
    inline bool check(int mid)
    {
        int now=0;
        for(int i=1;i<=mid;i++)
            if(s[i]!=c[0]) now++;
        if(now<=m) return true;
        for(int i=mid+1;i<=n;i++)
        {
            if(s[i-mid]!=c[0]) now--;
            if(s[i]!=c[0]) now++;
            if(now<=m) return true; 
        } 
        return false;
    }
    inline void read(int &x)
    {
        x=0; char c=getchar();
        while(!isdigit(c)) c=getchar();
        while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }
    }
    int main()
    {
        read(n);
        scanf("%s",s+1);
        int q,l,r,mid,ans; 
        read(q);
        while(q--)
        {
            read(m);
            scanf("%s",c);
            ans=0;
            l=m,r=n;
            while(l<=r)
            {
                mid=l+r>>1;
                if(check(mid)) ans=mid,l=mid+1;
                else r=mid-1;
            }
            printf("%d
    ",ans);
        }
    } 
    View Code


  • 相关阅读:
    Andrew Ng机器学习课程12
    Andrew Ng机器学习课程12
    排序算法十一:计数排序
    排序算法十一:计数排序
    排序算法十:桶排序
    排序算法十:桶排序
    基于MSP430F2618的程控电压源
    基于MSP430F2618的程控电压源
    Andrew Ng机器学习课程11之使用machine learning的建议
    Andrew Ng机器学习课程11之使用machine learning的建议
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/7478967.html
Copyright © 2011-2022 走看看