zoukankan      html  css  js  c++  java
  • Codeforces Round #613题解

    A题 

    签到水题

    #include<iostream>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<map>
    #include<vector>
    #include<cstdio>
    using namespace std;
    const int N=105;
    int main(){
        int n;
        string s;
        cin>>n;
        cin>>s;
        int i;
        int num1=0,num2=0;
        for(i=0;i<s.size();i++){
            if(s[i]=='L')
            num1++;
            else
            num2++;
        }
        cout<<num2+num1+1<<endl;
    }
    View Code

    B题

    由题意只需要求出一段长度和最大值即可,但是不能是全部长度,可以将它转化为在1--n-1和2--n求。

    注意答案可能负数,大数据建议开long long

    #include<iostream>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<map>
    #include<vector>
    #include<cstdio>
    using namespace std;
    const int N=100005;
    const int inf=0x3f3f3f3f;
    typedef long long ll;
    int s[N];
    int main(){
        int t;
        cin>>t;
        while(t--){
            memset(s,0,sizeof s);
            int p[N];
            int n;
            cin>>n;
            int i;
            ll sum=0;
            for(i=1;i<=n;i++){
                cin>>p[i];
                sum+=p[i];
            }
        ll flag=0;
            ll ans=-inf;
            for(i=1;i<=n-1;i++){
                flag+=p[i];
                ans=max(ans,flag);
                if(flag<0){
                  flag=0;
                }
            }
            flag=0;
            for(i=2;i<=n;i++){
                flag+=p[i];
                ans=max(ans,flag);
                
                if(flag<0){
                  flag=0;
                }
            }
            if(sum>ans)
            cout<<"YES"<<endl;
            else
            cout<<"NO"<<endl; 
        }
    }
    View Code

    C题

    求最小公倍数是否为X,注意思路转化,如果暴力求解每两个数的最小公倍数会超时。

    根据公式定义 lcm(a,b)=a/gcd(a,b)*b

    因此可以将a/gcd(a,b)当作枚举变量

    注意输入数据可能为素数

    另外,判断素数需要加速,否则会TLE,学到了一个新招叫做六素数法

    原理:每个数都可以表述为6n,6n+1,6n+2,6n+3,6n+4,6n+5且素数只能为6n相邻的两个数。

    官方简单题解:只需枚举X的约数,再判断即可,因为答案必定为两个约数。

    #include <bits/stdc++.h>
    using namespace std;
    #define finish(x) return cout << x << endl, 0
    #define ll long long
    
    ll x;
    
    ll lcm(ll a, ll b){
        return a / __gcd(a, b) * b;
    }
    int main(){
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        cin >> x;
        ll ans;
        for(ll i = 1 ; i * i <= x ; i++){
            if(x % i == 0 && lcm(i, x / i) == x){
                ans = i;
            }
        }
        cout << ans << " " << x / ans << endl;
    }
    easier implement
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<algorithm>
    #include<map>
    #include<vector>
    #include<cstdio>
    using namespace std;
    const int N=100005;
    const int inf=0x3f3f3f3f;
    typedef long long ll;
    ll x;
    ll gcd(ll a,ll b){
        return b==0?a:gcd(b,a%b);
    }
    bool isprime(long long x){
        if(x<=3)
        return x>1;
        else{
            if(x%6!=1&&x%6!=5)
            return false;
            else{
                long long k=sqrt(x);
                for(int i =5;i<=k;i+=6){
                    if(x%i==0||x%(i+2)==0)
                        return false;
                }
            }
        }
        return true;
    }
    int main(){
       cin>>x;
       ll i;
       if(x==1||isprime(x))
       cout<<1<<" "<<x<<endl;
       else{
           ll m1=1,m2=x;
        for(i=1;i<=sqrt(x);i++){
            if(x%i!=0)
            continue;
               ll b=x/i;
               if(gcd(b,i)==1){
                   if(b<m2){
                       m2=b;
                       m1=i;
                   }
               }
        }
        cout<<m1<<" "<<m2<<endl;
       }
       
    }
    my Code
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<algorithm>
    #include<map>
    #include<vector>
    #include<cstdio>
    using namespace std;
    const int N=100005;
    const int inf=0x3f3f3f3f;
    typedef long long ll;
    ll x;
    ll gcd(ll a,ll b){
        return b==0?a:gcd(b,a%b);
    }
    bool isprime(long long x){
        if(x<=3)
        return x>1;
        else{
            if(x%6!=1&&x%6!=5)
            return false;
            else{
                long long k=sqrt(x);
                for(int i =5;i<=k;i+=6){
                    if(x%i==0||x%(i+2)==0)
                        return false;
                }
            }
        }
        return true;
    }
    int main(){
       cin>>x;
       ll i;
       if(x==1||isprime(x))
       cout<<1<<" "<<x<<endl;
       else{
           ll m1=1,m2=x;
        for(i=1;i<=sqrt(x);i++){
            if(x%i!=0)
            continue;
               ll b=x/i;
               if(gcd(b,i)==1){
                   if(b<m2){
                       m2=b;
                       m1=i;
                   }
               }
        }
        cout<<m1<<" "<<m2<<endl;
       }
       
    }
    View Code
  • 相关阅读:
    解决 .net Core 3.1中使用GB2312编码异常
    sql server datetime类型字段使用isnull返回1900-01-01 00:00:00.000的问题
    c# – 从.NET中的字符串获取url参数
    fastjson对象,JSON,字符串,map之间的互转
    Java工具:Java递归去除Json字符串空值(key和value)
    vue运行报错 ‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
    java调用CTP API坑【我】
    SpringBoot在logback.xml中读取application.properties中配置的日志路径
    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com【我】
    springboot mybatis-plus分页配置不生效【我】
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12186207.html
Copyright © 2011-2022 走看看