1. 程式人生 > 實用技巧 >Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad)(A->C(質因子分解))

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;
    }
}