地址: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; } }