社区讨论
求助关于跨年赛T3
学术版参与者 5已保存回复 13
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 13 条
- 当前快照
- 1 份
- 快照标识符
- @mlrt3y7s
- 此快照首次捕获于
- 2026/02/18 17:05 17 小时前
- 此快照最后确认于
- 2026/02/19 09:45 2 分钟前
rt。
那场比赛的 T3,我写了一个感觉是 的暴力准备试试分数。代码如下:
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 条回复,欢迎继续交流。
正在加载回复...