2024CCPC郑州邀请赛暨河南省赛

IT技术竞赛中的数理逻辑、贪心算法和动态规划解题策略,

比赛记录:看群里大家嘎嘎拿牌,自己个人来solo了一下,发现简单到中等题很多,写了两小时出了7题,但是写的比较慢,对难题把握还是不准确

补题 : A题确实巧妙充分利用题目的数据范围来思考问题,D简单数数性质推理

A.Once In My Life

数理逻辑推理

题目要求我们构造奇怪的式子得满足出现123456789 + 一个指定的数,给定n要求找到一个k使得n*k符合要求,同时告诉我们 n < 1e8,k<2e10,可以注意到两者的乘积是刚好到达上限1e18级别那么我们如何去思考:我们无非就是想找到一个符合要求的数(1e18)同时是n的倍数->推出k,依照数据范围我们应该是在O(1-log)时间求出答案,我们看如何得到这个数,可以看到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.距离之比

数学推理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值