比赛记录:看群里大家嘎嘎拿牌,自己个人来solo了一下,发现简单到中等题很多,写了两小时出了7题,但是写的比较慢,对难题把握还是不准确
![]()
补题 : A题确实巧妙充分利用题目的数据范围来思考问题,D简单数数性质推理
A.Once In My Life
数理逻辑推理
题目要求我们构造奇怪的式子得满足出现123456789 + 一个指定的数,给定n要求找到一个k使得n*k符合要求,同时告诉我们 n < 1e8,k<2e10,可以注意到两者的乘积是刚好到达上限1e18级别那么我们如何去思考:我们无非就是想找到一个符合要求的数(1e18)同时是n的倍数->推出k,依照数据范围我们应该是在时间求出答案,我们看如何得到这个数,可以看到1234567890 + d是10位数 后面还可以接上8位数,也就是说这个 + 与n同级别数是可以构造出来的,那么构造完成之后加上快要变成n倍数的余数就是n的倍数了
void solve(){
LL n,d; cin>>n>>d;
LL ans = 1234567890 + d;
LL x=n;
while(x){
x/=10;
ans *= 10;
}
ans += (n-ans%n)%n;
cout << ans/n << endl;
return ;
}
B.扫雷1
贪心
我们是从前往后走的,可以得到如果要选择当前这个数必然是因为后面的点都小于等于这个数,否则我直接买后面的更优,所以我们只需要预处理出来后缀最小值即可
int w[N],suf[N];
void solve(){
cin>>n;
for(int i=1;i<=n;i++) cin>>w[i];
suf[n+1]=2e9;
for(int i=n;i>=1;i--) suf[i]=min(suf[i+1],w[i]);
int ans=0,cnt=0;
for(int i=1;i<=n;i++){
ans++;
if(ans>=w[i]){
if(w[i]<=suf[i+1]){
cnt += ans/w[i];
ans %= w[i];
}
}
}
cout << cnt << endl;
return ;
}
D.距离之比
数学推理
IT技术竞赛中的数理逻辑、贪心算法和动态规划解题策略,

最低0.47元/天 解锁文章
8278

被折叠的 条评论
为什么被折叠?



