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