社区讨论

求助关于跨年赛T3

学术版参与者 5已保存回复 13

讨论操作

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

当前回复
13 条
当前快照
1 份
快照标识符
@mlrt3y7s
此快照首次捕获于
2026/02/18 17:05
17 小时前
此快照最后确认于
2026/02/19 09:45
2 分钟前
查看原帖
rt。
那场比赛的 T3,我写了一个感觉是 O(n3)O(n^3) 的暴力准备试试分数。代码如下:
CPP
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
const int N=1e5+10,P=998244353;
int dp[N];
struct Node{
	int x,y;
}a[N];
void slove(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i].x;
	for(int i=1;i<=n;i++) cin>>a[i].y;
	for(int i=1;i<=n;i++){
		for(int j=1;j<i;j++){
			//{a[i].y=k*a[i].x+b
			//{a[j].y=k*a[j].x+b
			//a[i].y-a[j].y=k*(a[i].x-a[j].x);
			bool flg=1;
			double k=(a[i].y-a[j].y)*1.0/(a[i].x-a[j].x);
			double b=a[i].y-k*a[i].x;
			for(int l=j+1;l<i;l++){
				double d=a[l].x*k+b;
				if(abs(d-a[l].y)>m){
					flg=0;
					break;
				}
			}
			if(flg) dp[i]=max(dp[i],dp[j]+i-j-1);
		}
		//cout<<dp[i]<<' ';
	}
	cout<<dp[n]<<endl;
	for(int i=1;i<=n;i++) dp[i]=0;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	int T;
	cin>>T;
	while(T--) slove();
	return 0;
}
提交后我发现他直接过了!而且最大点只有 60 多毫秒。
所以是因为该题数据过水,还是说它的时间复杂度是对的?
玄小号关!

回复

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

正在加载回复...