社区讨论

问区别

CF2180DInsolvable Disks参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mk10co5n
此快照首次捕获于
2026/01/05 18:18
2 个月前
此快照最后确认于
2026/01/08 23:55
2 个月前
查看原帖
用 double 存上下界会T
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define N 2000100
int T,n,dp[N][2];
double mx[N],mn[N],a[N];
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>T;
	while(T--){
		cin>>n;for(int i=1;i<=n;i++)cin>>a[i];
		if(n==1){cout<<0<<'\n';continue;}
		a[n+1]=3e9;
		dp[1][0]=0,dp[1][1]=0;
		mx[1]=a[2]-0.5,mn[1]=a[1]+0.5;
		for(int i=2;i<=n;i++){
			if(a[i+1]-a[i]>a[i]-mx[i-1])
				dp[i][0]=dp[i-1][1]+1,mn[i]=a[i]+a[i]-mx[i-1];
			else dp[i][0]=dp[i-1][1],mn[i]=a[i]+0.5;
			if(a[i+1]-a[i]>a[i]-mn[i-1])
				dp[i][1]=dp[i-1][0]+1,mx[i]=a[i]+a[i]-mn[i-1];
			else if(a[i+1]-a[i]>a[i]-mx[i-1]){
				dp[i][1]=dp[i-1][0]+1,mx[i]=a[i+1]-0.5;
			}else{
				dp[i][1]=dp[i-1][0],mx[i]=a[i+1]-0.5;
			}
		}
		cout<<max(dp[n][0],dp[n][1])<<'\n';
	}
	return 0;
}
改成 int 能 AC
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define N 3000100
int T,n,dp[N][2],mx[N],mn[N],a[N];
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>T;
	while(T--){
		cin>>n;for(int i=1;i<=n;i++)cin>>a[i],a[i]*=2;
		if(n==1){cout<<0<<'\n';continue;}
		a[n+1]=6e9;
		dp[1][0]=0,dp[1][1]=0;
		mx[1]=a[2]-1,mn[1]=a[1]+1;
		for(int i=2;i<=n;i++){
			if(a[i+1]-a[i]>a[i]-mx[i-1])
				dp[i][0]=dp[i-1][1]+1,mn[i]=a[i]+a[i]-mx[i-1];
			else dp[i][0]=dp[i-1][1],mn[i]=a[i]+1;
			if(a[i+1]-a[i]>a[i]-mn[i-1])
				dp[i][1]=dp[i-1][0]+1,mx[i]=a[i]+a[i]-mn[i-1];
			else if(a[i+1]-a[i]>a[i]-mx[i-1])
				dp[i][1]=dp[i-1][0]+1,mx[i]=a[i+1]-1;
			else
				dp[i][1]=dp[i-1][0],mx[i]=a[i+1]-1;
		}
		cout<<max(dp[n][0],dp[n][1])<<'\n';
	}
	return 0;
}
求问原因~白吃一发罚时~

回复

3 条回复,欢迎继续交流。

正在加载回复...