• Codeforces Round #424


    基本全是水题

    第一题水,不过有hack点,先增后不变再减

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define pi acos(-1)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-9;
    const int N=100000+10,maxn=500+100,inf=0x3f3f3f;
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int n;
        cin>>n;
        bool f=0;
        int last,bh=0;
        for(int i=0;i<n;i++)
        {
            int a;
            cin>>a;
            if(i==0)last=a;
            else
            {
                if(last<a)
                {
                    if(bh==0)last=a;
                    else if(bh==1)f=1;
                    else f=1;
                }
                else if(last==a)
                {
                    if(bh==0)bh=1,last=a;
                    else if(bh==1)last=a;
                    else f=1;
                }
                else if(last>a)
                {
                    if(bh==0)bh=2,last=a;
                    else if(bh==1)bh=2,last=a;
                    else last=a;
                }
            }
        }
        if(f)cout<<"NO"<<endl;
        else cout<<"YES"<<endl;
        return 0;
    }
    A

    第二题更水,6分钟1a,maphash一下就行了

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define pi acos(-1)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-9;
    const int N=100000+10,maxn=500+100,inf=0x3f3f3f;
    
    map<char,char>m;
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        string s,p,t;
        cin>>s>>p>>t;
        for(int i=0;i<s.size();i++)
        {
            m[s[i]]=p[i];
        }
        for(int i=0;i<t.size();i++)
        {
            if('a'<=t[i]&&t[i]<='z')cout<<m[t[i]];
            else if('A'<=t[i]&&t[i]<='Z')cout<<(char)(m[t[i]-'A'+'a']+'A'-'a');
            else cout<<t[i];
        }
        cout<<endl;
        return 0;
    }
    B

    第三题想法题,先sort,然后找间距一一对应起来就可以 了(刚开始想的是求出值来,太蠢了)

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define pi acos(-1)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-9;
    const int N=2000+10,maxn=500+100,inf=0x3f3f3f;
    
    ll a[N],b[N];
    ll sum[N];
    set<ll>ans;
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        ll k,n;
        cin>>k>>n;
        for(ll i=0;i<k;i++)
        {
            cin>>a[i];
            if(i==0)sum[i]=a[i];
            else sum[i]=sum[i-1]+a[i];
        }
        for(ll i=0;i<n;i++)cin>>b[i];
        sort(b,b+n);
        sort(sum,sum+k);
        int p=b[0];
        for(int i=0;i<n;i++)b[i]-=p;
        ll i=0;
        for(int i=0;i<k;i++)
        {
            int res=0,p=0;
            for(int j=i;j<k;j++)
            {
                if(sum[j]-sum[i]==b[p])
                   p++;
                if(p>=n)
                {
                    ans.insert(sum[i]);
                    break;
                }
            }
        }
        cout<<ans.size()<<endl;
        return 0;
    }
    C

    第四题,给一堆人,和一堆钥匙的坐标,每个人拿钥匙去办公室,求最小时间,sort一下,然后二分最小时间,每次判断的时候还是枚举两个数组进行匹配

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define pi acos(-1)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-9;
    const int N=2000+10,maxn=500+100,inf=0x3f3f3f;
    
    ll a[N],b[N],p,n,k;
    bool ok(ll i,ll j,ll x)
    {
        return abs(a[i]-b[j])+abs(b[j]-p)<=x;
    }
    bool check(ll x)
    {
        ll j=0;
        for(int i=0;i<n;i++)
        {
            while(!ok(i,j,x)){
                j++;
            }
            if(j>=k)return 0;
            j++;
        }
        return 1;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin>>n>>k>>p;
        for(ll i=0;i<n;i++)cin>>a[i];
        for(ll i=0;i<k;i++)cin>>b[i];
        sort(a,a+n);
        sort(b,b+k);
        ll l=0,r=2e9+10;
        for(int i=0;i<100;i++)
        {
            ll m=(l+r)/2;
            if(check(m))r=m;
            else l=m;
        }
        while(check(l))l--;
        cout<<l+1<<endl;
        return 0;
    }
    D

     第5.6先留坑

    话说这场只a了两题,还好比较稳,没被hack,还涨了85分>.<

  • 相关阅读:
    关于JS动态切换样式表
    关于header()函数重定向的问题
    微信团队讲课笔记 Android 开发(二)UI设计
    Effective C++ 笔记:4设计与声明
    某面试算法题_最短时间找出十包粉末中的两蓝粉末。
    VS2015 配置opengl的一些库
    URAL 1225 Flags 简单DP,一重循环
    POJ 1384 Piggy-Bank 完全背包分析
    POJ 1651 Multiplication Puzzle DP 类似矩阵链
    URAL 1183 Brackets Sequence DP 路径输出
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/7170964.html
Copyright © 2020-2023  润新知