zoukankan      html  css  js  c++  java
  • Codeforces Round 613 Div2

    round 613

    A

    题意

    给出一个由LR组成的字符串,L代表向左移动,R代表向右移动,可能存在任意字符失效,初始位置为0,求有多少种可达的位置。

    思路

    显然是n+1n为字符串长度。

    代码

    #include<bits/stdc++.h>
    using namespace std;
     
    int main()
    {
        int n;
        string s;
        cin>>n>>s;
        cout<<n+1<<endl;
    }
    

    B

    题意

    给一个数组,两种选法,一种只能全部选,另一种可以选除了全选以外任意一个子串。求第二种选法是否大于第一种选法。

    思路

    求一下最大连续子序列和,然后判断是不是整体就好

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int MAX=1e5+5;
     
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int n,x,s=0,len;
            long long tot=0,sum=0,maxx=0;
            scanf("%d",&n);
            for(int i=0; i<n; i++)
            {
                scanf("%d",&x);
                tot+=x;
                sum+=x;
                if(sum>maxx)maxx=sum,len=i-s+1;
                if(sum<=0)sum=0,s=i+1;
            }
            if(maxx<=tot&&len==n)
                printf("YES
    ");
            else
                printf("NO
    ");
        }
    }
    

    C

    题意

    给一个X,找一对a,b,使得LCM(a,b)X,并且max(a,b)最小。

    思路

    假设a,b不互质,则一定存在a/gcd ,b/gcd使得答案更小,所以a,b一定是互质的,互质的a,b就是X的因数,枚举一下就好了。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
     
    ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
     
    int main()
    {
        ll x,a,b;
        scanf("%I64d",&x);
        for(ll i=1;i*i<=x;i++)
            if(x%i==0&&gcd(i,x/i)==1)
                a=i,b=x/i;
        printf("%I64d %I64d
    ",a,b);
    }
    

    D

    题意

    给一个数组,求这个数组异或某一个数x之后,最大值最小化的最大值。

    思路

    先写成二进制,然后从高到低考虑,若某一位所有数均为0或均为1,则这位一定可以全取0,即贡献为0。若有些数位0,有些数为1,这一位一定会取到1,则有两种可能,要不变0,要不变1,然后就取对应的数继续搜索下一位,每一层不超过 n 个数,所以总的复杂度为 O(nlog(k)) ,k为数组最大值。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int MAX=1e5+5;
     
    int a[MAX],n;
     
    int dfs(vector<int>v,int x)
    {
        if(x<0)return 0;
        vector<int>v0,v1;
        for(int i=0; i<v.size(); i++)
        {
            if((1<<x)&a[v[i]])v1.push_back(v[i]);
            else v0.push_back(v[i]);
        }
        if(!v1.size())
            return dfs(v0,x-1);
        if(!v0.size())
            return dfs(v1,x-1);
        return (1<<x)+min(dfs(v0,x-1),dfs(v1,x-1));
    }
     
    int main()
    {
        vector<int>v;
        scanf("%d",&n);
        for(int i=0; i<n; i++)
            scanf("%d",&a[i]),v.push_back(i);
        printf("%d
    ",dfs(v,29));
    }
    
  • 相关阅读:
    微软发布3款SQL Injection(SQL 注入)攻击检测工具
    TortoiseSVN 使用介绍
    windows下的Bug跟踪管理软件Bugfree的安装
    国内PHP开源建站程序一览
    55个经典开源Windows工具
    JavaScript代码格式化工具(JS代码分析必备)
    Javascript工具 使用packer来压缩JS文件
    开源UML设计工具StarUML
    看似简单的问题其实不简单
    Javascript工具 使用JSDoc建立JavaScript代码的文档
  • 原文地址:https://www.cnblogs.com/cryingrain/p/12514607.html
Copyright © 2011-2022 走看看