讨论 / 求解 WA60
xf243658 2012-08-11 07:56:00
点我顶贴 收藏 删除
program RQEX_500;

var

f,a:array[0..100000] of longint;

n,i,k,p,ans,j:longint;

begin

readln(n);

for i:=1 to n do read(a[i]);readln;

readln(k);

for i:=1 to n do{记录有多少比K小的}

if a[i]<k then f[i]:=f[i-1]+1

else begin

f[i]:=f[i-1];

if a[i]=k then p:=i;{K的位置}

end;

for i:=1 to p do{枚举(1,P)与(P,n)的组合}

begin

j:=p; if (j-i) mod 2<>0 then inc(j);{保证(i~j)为奇数}

repeat

if f[j]-f[i-1]>(j-i)div 2 then j:=2*(f[j]-f[i-1])+i{p~n间最小的可能解(貌似错了,改成inc(j)有几组数据能对,又有几组会错)}

else if f[j]-f[i-1]<(j-i)div 2 then j:=2*(j-i-f[j]+f[i])+i{p~n间最小的可能解(貌似错了,改成inc(j)有几组数据能对,又有几组会错)}

else begin inc(ans);inc(j);end;{f[j]-f[i-1]=(j-i)div 2比K大的和比K小的相等,得解}

if (j-i)mod 2<>0 then inc(j);{保证(i~j)为奇数}

until j>n;

end;

writeln(ans);

end.

希望有大牛能找出错误来,做了N久,无语了~~

#1 xf243658@2011-01-27 17:11:00
回复 删除
怎么没人啊!!!~~~
#2 xf243658@2011-01-27 19:42:00
回复 删除
......纠结了N久

总算是过了....

program RQEX_500;

var

f,a:array[0..100000] of longint;

n,i,k,p,ans,j:longint;

begin

readln(n);

for i:=1 to n do read(a[i]);readln;

readln(k);

for i:=1 to n do

if a[i]<k then f[i]:=f[i-1]+1

else begin

f[i]:=f[i-1];

if a[i]=k then p:=i;

end;

for i:=1 to p do

begin

j:=p; if (j-i) mod 2<>0 then inc(j);

repeat

if f[j]-f[i-1]=(j-i)div 2 then inc(ans)

else begin

j:=abs(j-i-2*(f[j]-f[i-1]))+j-2;

if (j-i)mod 2<>0 then inc(j);

end;

j:=j+2;

until j>n;

end;

writeln(ans);

end.

#3 lijiaming12341@2011-09-13 21:22:00
回复 删除
我也60分

#4 sxsxsx123890@2012-08-11 07:56:00
回复 删除
我也60

查看更多回复
提交回复