20230917普及组模拟赛题解
wflengxuenong · · 个人记录
T1:
最大公约数与最小公倍数。注意数据范围,要用
#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a,long long b)
{
if(b==0) return a;
else return gcd(b,a%b);
}
long long lcm(long long a,long long b)
{
return a*b/gcd(a,b);
}
int main()
{
long long a,b,c,i;
cin>>a>>b>>c;
i=lcm(a,b);
cout<<lcm(i,c);
return 0;
}
T2:
/*细节
判定无解
本题中答案为
0
0 不代表无解,如
1 0
0 114514
有解且答案为 0.
因此可以将
ans 预设为 −1,程序结束时ans 若仍为 −1 则无解。*/
#include<bits/stdc++.h>
#define N 1000001
using namespace std;
typedef long long ll;
ll n,k,x[N],ans=-1;
bool flag;
int main(){
cin>>n>>k;
for(ll i=1,a,b;i<=n;i++){
cin>>a>>b;
x[a]+=b;
}
for(ll i=0;i<N-k;i++){
if(!(x[i]&&x[i+k])||(k==0&&x[i]<2))continue;
if(k==0)ans=max(ans,x[i]*i);
else ans=max(ans,min(x[i+k],x[i])*(2*i+k));
}
if(ans==-1)cout<<"NO"<<endl;
else cout<<ans<<endl;
return 0;
}
T3
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;
const int N=2e5+10;
struct node{
int k,id;
}a[N];
int n,b[N],c[N],ft[N],bk[N];
bool cmp(node x,node y){
return x.k<y.k;
}
int main(){
cin>>n;
for(int i=1;i<=n+1;i++) cin>>a[i].k,a[i].id=i;
for(int i=1;i<=n;i++) cin>>b[i];
sort(a+1,a+n+2,cmp);
sort(b+1,b+n+1);
for(int i=1;i<=n;i++) ft[i]=max(ft[i-1],max(0,a[i].k-b[i]));
for(int i=n;i>=1;i--) bk[i]=max(bk[i+1],max(0,a[i+1].k-b[i]));
for(int i=1;i<=n+1;i++) c[a[i].id]=i;
for(int i=1;i<=n+1;i++) cout<<max(ft[c[i]-1],bk[c[i]])<<' ';
return 0;
}
T4:P6394 樱花,还有你
题目来源:P6394 樱花,还有你