zoukankan      html  css  js  c++  java
  • Codeforces Round #657 (Div. 2)垫底记

    A

    被这题卡住了,没写出来,想着类似AC自动机了,发现讨论一堆还可能有错。实质上就是每个位置枚举即可。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const string str="abacaba";
    int n;
    string s;
    bool check(string &a)
    {
        int cnt=0;
        for(int i=0;i+7<=n;i++)if(a.substr(i,7)==str)cnt++;
        return cnt==1;
    }
    int main()
    {
        int T;scanf("%d",&T);
        while(T--)
        {
            cin>>n>>s;
            bool has=0;
            for(int i=0;i+7<=n;i++)
            {
                string ss=s;
                bool ok=1;
                for(int j=0;j<7;j++)
                {
                    if(ss[i+j]!=str[j]&&ss[i+j]!='?'){ok=0;break;}
                    ss[i+j]=str[j];    
                }
                if(ok&&check(ss))
                {
                    for(int j=0;j<n;j++)if(ss[j]=='?')ss[j]='d';
                    puts("Yes"),cout<<ss<<endl,has=1;
                    break;
                }
            }
            if(!has)puts("No");
        }
    }
    View Code

    B

    枚举a,判断m被a除的余数看是否符合条件即可

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int T,l,r;
    ll m;
    int main()
    {
        cin>>T;
        while(T--)
        {
            cin>>l>>r>>m;
            int A,B,C;
            for(int a=l;a<=r;a++)
            {
                int rest=m%a;
                if(l+rest<=r&&m/a){A=a,C=l,B=l+rest;break;}
                rest=a-rest;
                if(l+rest<=r){A=a,B=l,C=l+rest;break;}
            }
            cout<<A<<' '<<B<<' '<<C<<endl;
        }
    }
    View Code

    C

    发现至多只有一种花买的数量>2,将花按a排序,二分+枚举即可

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e5+7;
    int n,m;
    ll ans,sum,s[N];
    struct node{int a,b;}a[N];
    bool cmp(node a,node b){return a.a==b.a?a.b>b.b:a.a>b.a;}
    int main()
    {
        int T;scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&m);
            for(int i=1;i<=m;i++)scanf("%d%d",&a[i].a,&a[i].b);
            sort(a+1,a+m+1,cmp);
            if(n==1){printf("%d
    ",a[1].a);continue;}
            ans=0;
            for(int i=1;i<=m;i++)s[i]=s[i-1]+a[i].a;
            for(int i=1;i<=m;i++)
            {
                if(i<=n&&n<=m&&a[n].a>=a[i].b)ans=max(ans,s[n]);
                else if(i>n&&a[n-1].a>=a[i].b)ans=max(ans,s[n-1]+a[i].a);
                else if(a[i].b>=a[1].a)ans=max(ans,a[i].a+1ll*(n-1)*a[i].b);
                else if(a[i].b<=a[m].a)ans=max(ans,s[m]+1ll*(n-m)*a[i].b);
                else{
                    int l=1,r=m,mid;
                    while(l<=r)
                    {
                        mid=l+r>>1;
                        if(a[mid].a>a[i].b)l=mid+1;
                        else r=mid-1;
                    }
                    if(i<=r)ans=max(ans,s[r]+1ll*(n-r)*a[i].b);
                    else ans=max(ans,s[r]+a[i].a+1ll*(n-r-1)*a[i].b);
                }
            }
            printf("%lld
    ",ans);
        }
    }
    View Code

    D

    这题就是two-pointers,由于长时间不写题码不出来,于是本场就做出来2题成功垫底,但最终还是订正完了

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=2e5+5;
    struct node{int id;ll x;}a[N];
    deque<int>q;
    int n;
    bool operator<(node a,node b){return a.x<b.x;}
    int main()
    {
        ll m,k;
        scanf("%d%*d%lld%lld",&n,&m,&k),m/=2;
        for(int i=1;i<=n;i++)scanf("%*d%lld",&a[i].x),a[i].id=i,a[i].x%=m;
        sort(a+1,a+n+1);
        for(int i=1;i<=n;i++)a[i+n]=a[i],a[i+n].x+=m;
        int l=2,del=n,sz=0,st=0,al=0;
        for(int i=1;i<=n;i++)
        {
            if(q.size()&&q.front()==a[i].id)q.pop_front(),sz--;
            l=max(l,i+1);
            while(a[l].x<=a[i].x+k-1)q.push_back(a[l++].id),sz++;
            if(sz<del)
            {
                if(q.size())al=i+1;
                del=sz,st=(a[i].x+k)%m;
            }
        }
        printf("%d %d
    ",del,st);
        if(del)for(int i=al;i<al+del;i++)printf("%d ",a[i].id);
    }
    View Code

    rank460 rating+=513

  • 相关阅读:
    oracle中函数和存储过程的区别和联系
    oracle系统函数(日期函数)
    触发器
    初次使用集合
    框架结构中同时改变多个框架内容,并显示两个页面
    借贷记账法的原理
    IIS7对json支持
    SqlHelper和数据访问层
    在easyui datagrid中formatter数据后使用linkbutton
    jQuery 添加/移除CSS类
  • 原文地址:https://www.cnblogs.com/hfctf0210/p/13343827.html
Copyright © 2011-2022 走看看