关于 ABC326 E 一个玄学错误
  • 板块学术版
  • 楼主linxuanrui
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/11/4 21:46
  • 上次更新2023/11/5 01:33:37
查看原帖
关于 ABC326 E 一个玄学错误
857323
linxuanrui楼主2023/11/4 21:46

AC 代码:

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
typedef long long ll;
using namespace std;
const int N = 5005;
int n,a[N],b[N],vis[N];
double ans = LLONG_MIN,dp[N][N],pre[N][N];
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n;
	for(int i = 1;i <= n;i++)cin >> a[i],b[i] = a[i];
	for(int i = 0;i <= n;i++){
		for(int j = 0;j <= n;j++){
			pre[i][j] = LLONG_MIN;
		}
	}
	for(int i = 1;i <= n;i++)dp[1][i] = a[i],pre[1][i] = max(pre[1][i - 1],dp[1][i]);
	for(int i = 2;i <= n;i++){
		for(int j = i/*this*/;j <= n;j++){
			dp[i][j] = pre[i - 1][j - 1] * 0.9 + a[j];
			pre[i][j] = max(pre[i][j - 1],dp[i][j]);
		}
	}
	for(int i = 1;i <= n;i++){
		double now = 1,fenzi = LLONG_MIN,fenmu = 0;
		for(int j = i;j <= n;j++)fenzi = max(fenzi,dp[i][j]);
		for(int j = 1;j <= i;j++){
			fenmu = fenmu + now;
			now = now * 0.9;
		}
		ans = max((long double)ans,fenzi / fenmu - 1200.0 * sqrtl(i * 1.00) / i);
	}
	cout << fixed << setprecision(12) << ans + 1e-7;
}

WA 了 12 个点的代码:

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
typedef long long ll;
using namespace std;
const int N = 5005;
int n,a[N],b[N],vis[N];
double ans = LLONG_MIN,dp[N][N],pre[N][N];
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n;
	for(int i = 1;i <= n;i++)cin >> a[i],b[i] = a[i];
	for(int i = 0;i <= n;i++){
		for(int j = 0;j <= n;j++){
			pre[i][j] = LLONG_MIN;
		}
	}
	for(int i = 1;i <= n;i++)dp[1][i] = a[i],pre[1][i] = max(pre[1][i - 1],dp[1][i]);
	for(int i = 2;i <= n;i++){
		for(int j = 1/*这里改成 1 了*/;j <= n;j++){
			dp[i][j] = pre[i - 1][j - 1] * 0.9 + a[j];
			pre[i][j] = max(pre[i][j - 1],dp[i][j]);
		}
	}
	for(int i = 1;i <= n;i++){
		double now = 1,fenzi = LLONG_MIN,fenmu = 0;
		for(int j = i;j <= n;j++)fenzi = max(fenzi,dp[i][j]);
		for(int j = 1;j <= i;j++){
			fenmu = fenmu + now;
			now = now * 0.9;
		}
		ans = max((long double)ans,fenzi / fenmu - 1200.0 * sqrtl(i * 1.00) / i);
	}
	cout << fixed << setprecision(12) << ans + 1e-7;
}

为啥改了一处就会 WA 呀……害的我交了 12 次才 AC……

2023/11/4 21:46
加载中...