p1062

迎春舞会之交谊舞
背景 Background 
HNSDFZ的同学们为了庆祝春节,准备排练一场舞会。
描述 Description  
     明显……交谊舞是2个人跳的,而且一男一女  -____-||||。
  由于交谊舞之前的节目安排,所有的表演者都站成了一排。这一排人的顺序满足2点:
    ①对于一对舞伴男生站在女生的左边。
    ②任何一对舞伴之间,要么没有人,要么就有若干对舞伴。
  排得过于整齐导致那些要表演交谊舞的人都没办法看到自己的舞伴,怎么办类…….
  所幸的是,SDFZ的女生比男生聪明得多。她们知道自己左边有几个男生。
  现在就请你再告诉这些女生,她们的舞伴距离她们多远(即包括那个男生,一共有多少男生夹在他们之间)。 
 
 输入格式 Input Format 
第一行为一个数n,表示参与跳交谊舞的女生个数。
第二行n个数,从左到右表示这n个女生左边分别有多少个男生。 
 
 输出格式 Output Format 
一排n个数,行末无空格。表示n个女生与其舞伴的距离。
  
    样例输入 Sample Input  
6
4 5 6 6 6 6

 样例输出 Sample Output  
1 1 1 4 5 6
 1 var a:array[1..20000of integer;
 2      x:array[0..10000of integer;
 3 
 4     n,l,i,j,k:integer;
 5  begin
 6  assign(input,'T.txt');
 7 assign(output,'A.txt');
 8 reset(input);
 9 rewrite(output);
10  readln(n);
11  x[0]:=0;
12  l:=1;
13  k:=0;
14  for i:=1 to n do{读入男生数,构成一个数组男生是-1,女生是1}
15     begin
16        read(x[i]);
17        for j:=x[i-1]+1 to x[i] do
18                begin
19                   k:=k+1;
20                   a[k]:=-1;
21                end;
22                   k:=k+1;
23          a[k]:=1;
24 
25     end;
26 
27 i:=1;
28 
29 while n<>0 do{一次检查女生和男生的匹配,如果输出了把男女生都设为0}
30 begin
31 while a[i]<>1 do i:=i+1;
32 j:=i;
33 while a[j]<>-1 do j:=j-1;
34   if n<>1 then write((i-j+1div 2,' 'else write((i-j+1div 2) ;
35 for l:=to i do a[l]:=0;
36 n:=n-1
37 end;
38 
39 
40 close(input);
41 close(output);
42  end.
43 

 

posted @ 2010-04-01 14:06  jesonpeng  阅读(202)  评论(0编辑  收藏  举报