NOIP模拟赛五

link

其他人都好高,我菜死了……

T1

写对了,但没写对。思路和代码都对了,但细节错了,没有判断 \(x<b\) 的情况导致挂了40pts,傻逼出题人还说往样例里面加了hack了,淦。

不过好像是因为我的写法不同所以也只挂了40pts,只能说玄学了。

code

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=114514,M=1919810;
ll n,b,a,ans1,ans2,tot;
//723787
//804201 9 429
int main(){
	cin>>n>>a>>b;
	ll x=n;
	if(a==1){
		if(b==1) cout<<ceil((double)n*1.0/2.0);
		else if(b>=n) cout<<n;
		else{
			ll x=n/(2*b);
			ll y=n%(2*b);
			cout<<b*x+(y>b?b:y);
		}
		return 0;
	}
	while(x>0){
		++tot;
		ll val=x-(x-b)/a;
		if(x-b<0) val=x; //就是这个判断,同失40pts
		if(tot&1) ans1+=val;
		else ans2+=val;
		x=(x-b)/a;
	}
	cout<<max(ans1,ans2);
	return 0;
}

T2

一个出题人说的比较简单的dp?但是我不会,我也不想补了,反正现在的水平肯定写不出来,还不如去做点更能提升自己的题。
做法先放这里:piCGpmq.png

T3

暴力有50pts?6。不过旁边的老哥没加读入优化第三个点挂了emm。

大致做法:二维前缀和。但是有点看不懂。

贺了榜上的正解,做出来的人还是非常多的,但是我菜/ll

code

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=514,M=1919810;
ll n,Q,opt,a,b,sum;
ll s1[N][N],s2[N][N],s3[N][N];
int main(){
	//freopen("Aha4.in","r",stdin);
	//freopen("Aha4.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0); 
	cin>>n>>Q;
	while(Q--){
		cin>>opt>>a>>b;
		if(a>b) swap(a,b);
		if(opt==1){
			sum+=b-a;
			for(int i=a;i<=n;++i) ++s1[i][b];
			for(int i=b;i>=1;--i) ++s2[a][i];
			for(int i=b;i<=n;++i) ++s3[b-a][i];
		}
		else{
			ll ans=sum;
			for(int i=1;i<=n;++i)
				if(b<=i) ans-=(b-a)*(s1[a][i]);
				else if(a+b<2*i) ans-=s1[a][i]*(2*i-a-b);
			for(int i=a+1;i<=n;++i)
				if(a+b>2*i) ans-=s2[i][b]*(a+b-2*i);
			for(int i=1;i<=n;++i)
				if(2*i>b-a) ans-=(b>i+a?s3[i][b-1]-s3[i][a+i]:0)*(2*i-(b-a));
			cout<<ans<<'\n';
		}
	}
	return 0;
}

T4

太难,同T2,先放做法:
piCGkhF.png

piCGEp4.png

posted @ 2023-10-16 15:57  和蜀玩  阅读(29)  评论(0)    收藏  举报