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.