【LGR-141-Div.2】洛谷 6 月月赛 I (前两题)
T1:金盏花
传送门
直接暴力枚举前6位的值即可,记得开long long
#include<bits/stdc++.h>
using namespace std;
#define int long long
int y,z,ans=1e18;
signed main(){
scanf("%lld%lld",&y,&z);
for(int i=100000;i<=999999;i++){
int x=i*1000000+y;
ans=min(ans,abs(x-z));
}
printf("%lld\n",ans);
return 0;
}
T2:红草莓
传送门
稍微手算几组就可以发现对于ai,就是将所有为gcd(ai,n)的倍数的位置染为蓝色
那么根据这个性质写出代码发现只有70pts,只需要加一个判断ai之前是否出现过,如果出现过直接输出0(显然)
即可通过
复杂度应该是<=O(nlogn)的:
对于不重复的a数组(不防a1 < a2 < ... < an)
复杂度为O(n/a1 + ... + n/an)<=O(n/1 + ... + n/n)=O(nlogn)
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[500005];
int gcd(int x,int y){
if(y==0)return x;
else return gcd(y,x%y);
}
bool vis[500005],p[500005];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)scanf("%d",&a[i]),a[i]=gcd(a[i],n);
for(int i=1;i<=m;i++){
if(p[a[i]]){
printf("%d ",0);
continue;
}
int sum=0;
for(int j=0;j<n;j+=a[i])
if(!vis[j]){
vis[j]=1;
sum++;
}
p[a[i]]=1;
printf("%d ",sum);
}
puts("");
return 0;
}
本文作者:kent
本文链接:https://www.cnblogs.com/kentsbk/p/17455288.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步