Array

来源:互联网 发布:求数组最大最小值 编辑:程序博客网 时间:2024/05/19 16:50

Array
1s; 256M
1.1 题目描述
Alice 有一个数列ai。
但是她不喜欢这个数列,于是她决定随机交换其中两个数。
Alice 想知道,交换后的数列与原数列相同的数有多少个。请求出所有可能的
值。
1.2 输入格式
第一行一个正整数n,表示Alice 的数列的长度。
第二行n 个正整数,第i 个数表示ai,即交换前的数列的第i 项。
1.3 输出格式
一行若干个严格递增的正整数,用空格隔开,表示交换后的数列与原数列相
同的数的个数。
1.4 样例输入
32
3 3
1.5 样例输出
1 3
1.6 样例解释
交换后可能的数列有2 3 3, 3 2 3, 3 3 2,个数分别是3, 1, 1。
1.7 数据范围
对于100% 的数据,1  n  100; 1  ai  1000。
做法:显而易见的模拟,其实对于大部分的数据,讨论是否是输出n和n-2就好了(能对?)。。
代码如下

var  f:array[0..1001] of boolean;  b,a:array[0..1000] of longint;  n,i,j,k,t,sum:longint;begin  assign(input,'array.in'); reset(input);  assign(output,'array.out'); rewrite(output);  readln(n);  for i:=1 to n do    read(a[i]);  for i:=1 to n-1 do    for j:=i+1 to n do      begin        b:=a;        sum:=0;        t:=b[i]; b[i]:=b[j]; b[j]:=t;        for k:=1 to n do          if a[k]=b[k] then inc(sum);        f[sum]:=true;      end;  for i:=0 to n do    if f[i] then write(i,' ');  close(input); close(output);end.
原创粉丝点击