Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad)(A->C(質因子分解))
阿新 • • 發佈:2020-11-03
地址: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; } }