寒假集训测试一 2025/1/14
T1 饮料换购
记录额外的瓶盖数量
达到 3 个就加上一瓶
签到题
考场少打等号痛失36pts

Code
#include<bits/stdc++.h>
using namespace std;
int n,ans,peel;
int main(){
    scanf("%d",&n);
    while(n>0){
        ans+=n;
        peel+=n%3;
        n/=3;
        if(peel>=3)peel-=3,n++;
    }
    printf("%d",ans);
    return 0;
}

T2 买不到的数目
数学题
数据范围抽象(是错的)
大概 long long
[dp/暴力] 直接 38 DIE
有注意力能注意到是 xy-x-y
没有注意力的(such as me)
记一下结论吧
或者......
以 Sample 47 举例
我们发现 若 x%4==0||x%7==0 则 x 一定可以
(1,7)  Only 4
(7,14) 7以上 x%4=03均可 (7%4==3)
(14,21) 14以上 x%4=032 均可 (7%4==3 14%4==2)
21以上 一定可以了
发现答案应该在 (xy-2y,xy-y) 中
考虑最后一次补上的约束 21%4==1
so ans%x=(xy-y)%x=(-y)%x
右边界刚好满足
为了破掉整除y
我们减去 x 即可
ans=xy-x-y
QED!!!
(感谢 lbh123 的启发)
Code
#include<bits/stdc++.h>
using namespace std;
long long n,m;
int main(){
	scanf("%lld%lld",&n,&m);
	printf("%lld",n*m-n-m);
	return 0;
}

T3 费解的开关

2^25 [dfs/bfs]
剪枝写好了18pts
写不好直接爆0pt

正解离谱 2^5 dfs
枚举第一排每一个按还是不按
用二进制
00000->11111 <=> 0->31
接下来如果当前位置为灭
就按其正下方的按钮
如此而无后效性
最后检查最后一排是否全 1
(因为下面没有了)
若全为一则统计答案

Code
#include<bits/stdc++.h>
using namespace std;
char mp[10][10],in[10][10];
int T,ans,answer;
void push(int idx,int idy){
	mp[idx][idy]=((mp[idx][idy]-48)^1)+48;
	mp[idx+1][idy]=((mp[idx+1][idy]-48)^1)+48;
	mp[idx-1][idy]=((mp[idx-1][idy]-48)^1)+48;
	mp[idx][idy+1]=((mp[idx][idy+1]-48)^1)+48;
	mp[idx][idy-1]=((mp[idx][idy-1]-48)^1)+48;
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>T;
	while(T--){
		answer=100;
		cin>>(in[1]+1)>>(in[2]+1)>>(in[3]+1)>>(in[4]+1)>>(in[5]+1);
		for(int it=0;it<=31;it++){
			ans=0;
			for(int i=1;i<=5;i++)for(int j=1;j<=5;j++)mp[i][j]=in[i][j];
			if((it>>0)&1)push(1,1),++ans;
			if((it>>1)&1)push(1,2),++ans;
			if((it>>2)&1)push(1,3),++ans;
			if((it>>3)&1)push(1,4),++ans;
			if((it>>4)&1)push(1,5),++ans;
			for(int j=1;j<5;j++)for(int k=1;k<=5;k++)if(mp[j][k]=='0')push(j+1,k),++ans;
			if(mp[5][1]=='1'&&mp[5][2]=='1'&&mp[5][3]=='1'&&mp[5][4]=='1'&&mp[5][5]=='1')answer=min(answer,ans);
		}
		if(answer>6)cout<<"-1\n"; else cout<<answer<<"\n";
	}
	return 0;
}


T4 机器人跳跃问题
每次跳到都变成 2E-H
逆推即可
签到成功

Code
#include<bits/stdc++.h>
using namespace std;
const int N=100856;
const double eps=1e-7;
int n;
long long lable[N];
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%lld",&lable[i]);
	double ans=0.0;
	for(int i=n;i>=1;i--)ans=(ans+lable[i])/2.0;
	cout<<(long long)(ans+0.99999);
	return 0;
}

posted on   2025ing  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示