测试结果错误.错误结果为:can’t
正确结果应为:can
以下是我的程序
program zz;
var
a,b:array[1..20000]of longint;
n1,m1,i,j,m,n,s,t:longint;
n2,m2,n3,m3,n4,m4:real;
begin
read(n,m);
for i:=1to n do
begin
read(a[i]);
n1:=n1+a[i];
end;
for i:=1to m do
begin
read(b[i]);
m1:=m1+b[i];
end;
if m>n then begin writeln('can',chr(39),'t'); exit; end;
if m=0 then begin write('can'); exit; end;
if n=0 then begin write('can',chr(39),'t'); exit; end;
n2:=n1/n; m2:=m1/m;
if m2>n2 then begin write('can',chr(39),'t'); exit; end;
for i:=1to n do
n3:=n3+sqr(a[i]-n2);
for i:=1to m do
m3:=m3+sqr(b[i]-m2);
n4:=n3/n;
m4:=m3/m;
if (n>m)and(n2>m2)and(n4<m4) then writeln('can')
else writeln('can',chr(39),'t');
readln(s);
end.
谢谢您的帮助
/*
题目描述
5月11日,在福州人民的热烈欢迎下,象征着和平、友谊、圣洁的奥运火炬终于来到了福州,开始了传递……
这次传递中也伴有不和谐的音符,达赖集团的极少数藏独分子想要在途中破坏奥运圣火,圣火护卫队的队员们也要尽自己最大努力去保卫圣火不受侵犯。(我出这道题,也算为奥运出了自己的一份微薄之力了)
数据范围:n+m≤18511,体力都在longint范围内(可能是负数)
输入格式
输入:
第1行,两个整数n和m,分别代表圣火护卫队的人数及藏独分子的人数;
接下来n行,每行一个数代表圣火护卫队每个人的体力;
接下来m行,每行一个数代表每个藏独分子的体力。
输出格式
输出:
输出圣火护卫队是否能保护圣火,能输出can,不能输出can't。所谓是否能保护圣火,指的是圣火护卫队队员的人数多;且圣火护卫队队员的体力平均数高;且圣火护卫队队员的体力的方差小(三项都满足)
样例输入
3 2
18 18 18
1 2
样例输出
can
*/
#include <iostream>
using namespace std;
int main()
{
long i,n,m,sa=0,sb=0,s1a=0,s1b=0,a[18600],b[18600];
cin>>n>>m;
if (m==0&&n!=0)
{
cout<<"can";exit(0);
}
else
if (n==0&&m!=0)
{
cout<<"can't";exit(0);
} else if (m==0)
{ cout<<"can";exit(0);}
for (i=1;i<=n;i++)
{cin>>a[i];sa+=a[i];}
for (i=1;i<=m;i++)
{cin>>b[i];sb+=b[i];}
sa/=n;sb/=m;
for (i=1;i<=n;i++) s1a+=(a[i]-sa)*(a[i]-sa);
for (i=1;i<=m;i++) s1b+=(b[i]-sb)*(b[i]-sb);
s1a/=n;s1b/=m;
if (n>m&&sa>sb&&s1a>=s1b) cout<<"can";
else cout<<"can't";
return 0;
}