Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad)(A->C(质因子分解))

地址:http://codeforces.com/contest/1445/problem/A

解析:

既然a[]是递增,那么b[]递减即可。遍历一遍即可。

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#include<map>
typedef long long ll;
const int maxn=1e4;
int a[maxn],b[maxn];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,x;
        cin>>n>>x;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        for(int i=1;i<=n;i++)
            cin>>b[i];
        sort(b+1,b+1+n);
        int ok=0;
        for(int i=1;i<=n;i++)
        {
            if(a[i]+b[n-i+1]>x)
            {
                ok=1;break;
            }
        }
        if(ok)
            cout<<"No"<<endl;
        else
            cout<<"Yes"<<endl;
    }
}

 

B:http://codeforces.com/contest/1445/problem/B

解析:

没读懂哎,然后我就猜了一波样例,就这么过了。。。。max(a+b,c+d)

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#include<map>
typedef long long ll;
const int maxn=1e4;
int a[maxn],b[maxn];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int a,b,c,d;
        cin>>a>>b>>c>>d;
        cout<<max(a+b,c+d)<<endl;
    }
}

C:http://codeforces.com/contest/1445/problem/C

题意:

给出p<=1e18,q<=1e9

求出一个最大x,使得p%x==0,x%q!=0

解析:

1:p<q

直接输出p

2:p>=q

当p%q!=0时,直接输出p即可

所以现在需要讨论的就是p%q==0的时候

既然p%q==0,那么对它俩分解质因子,q的质因子一定包含在p的质因子里面。

对于x,p%x==0,那么求x,一定要p不断地除自身的质因子才行。

怎么避免x%q==0呢?对于p,q的同一个质因子k来讲,如果p那边的幂次大于q,那么p除k可能不仅仅是一步,可能除好几次才能保证p%q!=0。所以要不断地除,直到p%q!=0才行。

也就是说,每次p要不停除q的某一个质因子,直到此质因子在p的次幂<q的,这个时候一定满足p%q!=0,因为这个时候p的质因子集合就不完全包含q的了。每次取个最大值即可。

#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
const int maxn=1e5+10,maxn2=31*maxn;
int idx=0;
typedef long long ll;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        ll p,q;
        cin>>p>>q;
        ll qq=q;
        vector<ll>v;
        for(int i=2;i<=q/i;i++)
        {
            while(q%i==0)
            {
                q=q/i;
                v.push_back(i);
            }
        }
        if(q>1)
            v.push_back(q);
        ll maxx=0;
        for(int i=0;i<v.size();i++)
        {
            ll md=p;
            while(md%qq==0)
            {
                md=md/v[i];
            }
            maxx=max(maxx,md);
        }
        cout<<maxx<<endl;
    }
}

 

posted @ 2020-11-02 21:03  liyexin  阅读(115)  评论(0)    收藏  举报