牛客寒假算法集训6-总结

A

思路:
分解质因数当指数为1并且cnt==3时满足条件

时间复杂度:
o(n)

AC代码:

#include <iostream>

using namespace std;

int l,r,cnt;
bool k;
int c[100];

void divide(int n)
{
    int t=n;cnt=0;
    if(k) return;
    for(int i=2;i<=n/i;i++)
        if(n%i==0)
        {
            int s=0;
            while(n%i==0)
            {
                n/=i;
                s++;
            }
             if(s==1) cnt++;
        }

   if(n>1) cnt++;
   if(cnt==3&&!k) {cout<<t;k=true;}
    
}
int main()
{
    cin>>l>>r;
    for(int i=l;i<=r;i++) divide(i);
    if(!k) cout<<-1;
    return 0;
}

B

思路:
先排序再二分

时间复杂度:
o(nlogn)

AC代码:

#include <bits/stdc++.h>

using namespace std;

const int N=45;

typedef long long ll;

ll n,t,l=-1,r=-1;
ll res=1e9;

int main()
{
    cin>>n;
    vector<ll> a(n),b(n);
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<n;i++) cin>>b[i];

    sort(a.begin(),a.end());
    
    for(int i=0;i<n;i++)
    {
        auto x = lower_bound(a.begin(), a.end(), b[i]);
        int y = x - a.begin();
        if (x == a.end()) 
        {
            if(b[i]-a[y-1]<res)
            {
                res=b[i]-a[y-1];
                l=y-1,r=i;
            }
        }
        else 
        {
            if(a[y]-b[i]<res)
            {
                res=a[y]-b[i];
                l=y,r=i;
            }
            if ( b[i] - a[y - 1] < res && y>0 )
            res = b[i] - a[y - 1], l = y - 1,r = i;
        }
     }
    swap(a[l],a[r]);
               
    for(int i=0;i<n;i++) cout<<a[i]<<' ';

    return 0;
}

C

思路:
打表

AC代码:

#include <iostream>
#include <algorithm>
#include <map>
#include <tuple>

using namespace std;

typedef long long ll;

const int N=46;

ll q,n;
ll a[N];

int main()
{
    a[1]=1,a[2]=1;
    for(int i=3;i<=45;i++) a[i]=a[i-1]+a[i-2];
    cin>>q;
    map<ll,tuple<int,int,int>>mp;
    for(int i=0;i<46;i++)
        for(int j=0;j<46;j++)
            for(int k=0;k<46;k++)
            mp[a[i]+a[j]+a[k]]={i,j,k};
    
    while(q--)
    {
        cin>>n;
        if(mp.count(n))
        {
            auto [o,b,c]=mp[n];
            cout<<a[o]<<' '<<a[b]<<' '<<a[c]<<endl;
        }
        else  cout<<-1<<endl;
    }
    return 0;
}

D

思路:
签到题

时间复杂度:
...

AC代码:

#include <iostream>

using namespace std;

double p;

int main()
{
    cin>>p;
    cout<<p*p*(1-p)*(1-p)*(1-p)+p*p*p*(1-p)*(1-p)<<endl;
    
    return 0; 
}

E

思路:
模拟

AC代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;

string a;
int cnt1,cnt2;
string b;
bool k;
long long sum;

int main()
{    
    cin>>a>>b;
    int t=a.length()-3;
    for(int i=2;i<a.length();i++)
    {
        sum+=pow(10,t)*(a[i]-'0');
        t--;
    }
        
    for(int i=0;i<b.length();i++)
    {
        if(b[i]=='R') cnt1++;
        else cnt2++;
        
        if(cnt1==sum/2+1) {cout<<"kou!"<<endl<<cnt1+cnt2;k=true; break;}
        if(cnt2==sum/2+1) {cout<<"yukari!"<<endl<<cnt1+cnt2;k=true; break;}
    }
    
    if(!k) cout<<"to be continued."<<endl<<cnt1+cnt2;
    
    return 0;
}

I

思路:
贪心

AC代码:

void solve()
{
    ll n,m;cin >> n >> m;
    create_vec(a,n);
    create_vec(b,m);
    ll mxa,mxb,mna,mnb,curmn,curmx;
    mxa=mxb=-INF; mna=mnb=INF;
    curmn=curmx=0;
    FORLL(i,0,n-1){
        curmn+=a[i];
        curmx+=a[i];
        if(curmn>0) curmn=0;
        if(curmx<0) curmx=0;
        mna=min(mna,curmn);
        mxa=max(mxa,curmx);
    }
    curmn=curmx=0;
    FORLL(i,0,m-1){
        curmn+=b[i];
        curmx+=b[i];
        if(curmn>0) curmn=0;
        if(curmx<0) curmx=0;
        mnb=min(mnb,curmn);
        mxb=max(mxb,curmx);
    }
    curmn=INF; curmx=-INF;
    FORLL(i,0,n-1){
        curmn=min(curmn,a[i]);
        curmx=max(curmx,a[i]);
    }
    if(curmx<=0) mxa=min(mxa,curmx);
    if(curmn>=0) mna=max(mna,curmn);
    curmn=INF; curmx=-INF;
    FORLL(i,0,m-1){
        curmn=min(curmn,b[i]);
        curmx=max(curmx,b[i]);
    }
    if(curmx<=0) mxb=min(mxb,curmx);
    if(curmn>=0) mnb=max(mnb,curmn);
    cout << max({mna*mnb,mna*mxb,mxa*mnb,mxa*mxb}) << endl;
}
posted @   Eric`  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示