• Educational Codeforces Round 86 (Rated for Div. 2)


    地址:http://codeforces.com/contest/1342

         题意:给出x,y和1操作2操作花费的费用a,b。使得x==y==0的最小花费。

         解析:两种方式,x,y中较大的先-1,x==y后再一块-1到0。第二个方式就是,x先减到0,y再减到0。取个min就可以了。

    #include<iostream>
    #include<cstring>
    #include<map>
    #include<cstdlib>
    #include<algorithm>
    #include<set>
    using namespace std;
    typedef long long ll;
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            ll x,y,a,b;
            cin>>x>>y>>a>>b;
            if(x==y&&x==0)
            {
                cout<<"0"<<endl;continue;
            }
            if(x>y)
            {
                ll md=x-y;
                cout<<min(md*a+y*b,x*a+y*a)<<endl;
            }
            else if(x<y)
            {
                ll md=y-x;
                cout<<min(md*a+b*x,x*a+y*a)<<endl;
            }
            else if(x==y)
            {
                cout<<min(x*b,x*a+y*a)<<endl;
            }
        }
    }

         题意:给出t串,求s串,t是s的子串(题中指s删除部分元素所得的子串)。保证s的循环周期最小,lens<=2*lent。

         解析:这题有点奇怪。01竟然也输出01而且周期是2。。反正顺着题目意思写就行了,如果t串全相同,直接输出t串,否则遇见挨着相同的,中间就插一个与相邻不同的字符。

    #include<iostream>
    #include<cstring>
    #include<map>
    #include<cstdlib>
    #include<algorithm>
    #include<set>
    using namespace std;
    typedef long long ll;
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            char s[200];
            cin>>s;
            int len=strlen(s);
            int ok=0;
            for(int i=1;i<len;i++)
            {
                if(s[i]!=s[i-1])
                {
                    ok=1;break;
                }
            }
            if(!ok)
                cout<<s<<endl;
            else
            {
                for(int i=0;i<len;i++)
                {
                    cout<<s[i];
                    if(s[i]==s[i+1])
                    {
                        if(s[i]=='0')
                            cout<<"1";
                        else
                            cout<<"0";
                    }
                }
                cout<<endl;
            }
        }
    }

         题意:给出a,b,q。然后是q个l,r。求l,r内有多少个数满足%a%b!=%b%a。

         解析:令x=a*b。x%a%b==x%b%a==0,所以可以先看<x的数。一个连续区间去模同一个数是有周期性的,模俩也不例外,把a*b看成一个数,那么连续区间%x的周期就是a*b。可以先把a*b以内满足题目条件的数找出来,用p[]前缀和打表,下次询问时直接相减就可以了。对于R,是:p[a*b-1]*(R/(a*b))+p[R%(a*b)]。因为打表只打到了a*b-1这里,R/(a*b)是算一下R里有几个周期,R%(a*b)不满一个周期的情况。L左边的同理,注意这里是p[L-1],因为求的是个闭区间[L,R]。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn=50000;
    int p[maxn];
    ll ac(ll nu,ll x)
    {
        return p[x-1]*(nu/x)+p[nu%x];
    }
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            ll a,b,q;
            cin>>a>>b>>q;
            for(int i=1;i<a*b;i++)
            {
                p[i]=p[i-1];
                if((i%a%b)!=(i%b%a))
                {
                    p[i]++;
                }
            //    cout<<p[i]<<"  ";
            }
            ll x=a*b;
            while(q--)
            {
                ll l,r;
                cin>>l>>r;
                cout<<ac(r,x)-ac(l-1,x)<<" ";
            }
        }
    }
  • 相关阅读:
    Android Bitmap 常见的几个操作:缩放,裁剪,旋转,偏移
    vue.js 本地解决跨域
    VUE添加网站favicon.ico图标
    在mpvue引入flyio
    页面中加入地图map
    360校招——最后赢家(C++)
    奇安信校招——买口罩(c++)
    携程校招——携程海洋馆的海豚小宝宝(C++)
    阿里云Web应用托管服务,低成本建个人博客(wordpress和wiki.js)
    (嵌入式)工程模板的创建和MDK下配置开发STM32F103ZE
  • 原文地址:https://www.cnblogs.com/liyexin/p/12790978.html
Copyright © 2020-2023  润新知