警示后人!!!WA on #14必看!!!
  • 板块P1404 平均数
  • 楼主Makerlike
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/28 20:14
  • 上次更新2024/6/28 22:23:14
查看原帖
警示后人!!!WA on #14必看!!!
684285
Makerlike楼主2024/6/28 20:14

cout要输出(int)(ans*1000+0.1)!!! 别问为啥!!问就是实践出真知

这是我最初的代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define eps 1e-6
#define int long long
const int N=1e5+10;
int n,m,a[N];
bool check(double f){
	double s[N],v[N];
	for(int i=1;i<=n;i++)
		s[i]=s[i-1]+1.0*a[i]-f;
	double minn=1e9,ans=-1;
	for(int i=m;i<=n;i++){
		minn=min(minn,s[i-m]);
		ans=max(ans,s[i]-minn);
	}
	return ans>=0;
	
}
signed main(){
	scanf("%lld %lld",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
	}
	double l=0,r=2e8;
	while(r-l>eps){
		double mid=(l+r)/2.0;
		if(check(mid))
			l=mid;
		else
			r=mid;
	}
	printf("%.0lf",l*1000);
	return 0;
}

然而,92分,我就尝试改成cin,cout

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define eps 1e-6
#define int long long
const int N=1e5+10;
int n,m,a[N];
bool check(double f){
	double s[N],v[N];
	for(int i=1;i<=n;i++)
		s[i]=s[i-1]+1.0*a[i]-f;
	double minn=1e9,ans=-1;
	for(int i=m;i<=n;i++){
		minn=min(minn,s[i-m]);
		ans=max(ans,s[i]-minn);
	}
	return ans>=0;
	
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	double l=0,r=2e8;
	while(r-l>eps){
		double mid=(l+r)/2.0;
		if(check(mid))
			l=mid;
		else
			r=mid;
	}
	cout<<(int)(l*1000);
	return 0;
}

结果就只有36分了,所以我翻了翻讨论版,然后……

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define eps 1e-6
#define int long long
const int N=1e5+10;
int n,m,a[N];
bool check(double f){
	double s[N],v[N];
	for(int i=1;i<=n;i++)
		s[i]=s[i-1]+1.0*a[i]-f;
	double minn=1e9,ans=-1;
	for(int i=m;i<=n;i++){
		minn=min(minn,s[i-m]);
		ans=max(ans,s[i]-minn);
	}
	return ans>=0;
	
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	double l=0,r=2e8;
	while(r-l>eps){
		double mid=(l+r)/2.0;
		if(check(mid))
			l=mid;
		else
			r=mid;
	}
	cout<<(int)(l*1000+0.1);
	return 0;
}

就AC了

所以,重要的事情说三遍 cout要输出(int)(ans1000+0.1)!!! cout要输出(int)(ans1000+0.1)!!! cout要输出(int)(ans*1000+0.1)!!! 希望能别帮助你

2024/6/28 20:14
加载中...