CodeForces 382C Arithmetic Progression——if else大法

什么都不说了。

http://codeforces.com/contest/382/submission/5728990

因为比赛的时候被坑了,所以我写了特别详尽的注释。。。

直接看代码就好。。。

我是不是应该放弃使用PHP来打CF?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php 
# 输入处理
# 读入第1行,并丢弃
$in=fgets(STDIN);
# 读入第2行
$in=fgets(STDIN);
# 按空格分隔并转换为整数
$num=explode(" ", $in);
foreach ($num as &$v) {
$v=intval($v);
}
# $len 存储数据个数
$len=count($num);
# 输入处理结束

# 当只有0或1个数字的时候,输出-1并退出
if($len<=1){
echo -1;
exit();
}

# 预处理
# 将 $num 数组按升序排列
sort($num);
# 建立空数组 $error,用以存放两数差值
$error=array();
# 分别计算数组中前后两数差值,以这个差值为键,存入$error中。
for($i=1;$i<$len;$i++){
# 计算当前数和之前数的差值
$ds=$num[$i]-$num[$i-1];
# 如果存在这个差值,就把当前下标插入这个差值所在的数组中。
if(array_key_exists($ds, $error)){
array_push($error[$ds],$i);
# 否则,新建这个差值为键,下标为值的数组
}else{
$error[$ds]=array($i);
}
}
# 统计存在的差值个数
$errorcount=count($error);
# 预处理结束

# 结果处理
# 新建结果数组
$result=array();
# 对存在的差值个数进行分类讨论
# 如果差值个数小于或等于0
if($errorcount<=0){
# 你TM在逗我?
exit();
}else
# 如果只有一个差值——可能情况:
# 1.只有2个元素;
# 2.已经是等差数列;
if($errorcount==1){
# 检出这个差值,保存在 $d 中
$d=array_keys($error);
$d=(int)$d[0];
# 如果只有两个元素
if($len==2){
# 检查是否可以在中间插入
if($d%2==0)
array_push($result, $num[1]-$d/2);
}
# 对于已经是等差数列的情况和只有两个元素的情况,都需要两边插入
array_push($result, $num[0]-$d, $num[$len-1]+$d);
# 去除结果数组中重复数据
$result=array_unique($result);
# 对结果数组再排序
sort($result);
# 输出
echo count($result);
echo "n";
foreach ($result as $v) {
echo $v." ";
}
exit();
}else
# 如果存在两个差值,则有可能存在一个
if($errorcount==2){
# 检出这两个差值
$d=array_keys($error);
sort($d);
# 检查较大的key是否是较小的key的2倍
if($d[1]-$d[0]==$d[0]) {
# 如果是,则检查较大的key是否只有一个元素。
if(count($error[$d[1]])==1){
# 如果是,则在此键值处插入
$result=$num[$error[$d[1]][0]]-$d[0];
# 输出 “1n此数字”
echo "1n".$result;
exit();
}
}
# 否则,输出0
echo 0;
exit();
}
# 如果存在多于两个差值,则一定不存在可插入元素
else{
# 输出0
echo 0;
exit();
}
?>
<!doctype html>
<html>
<head>
<title>Zyzsdy</title>
</head>
<body>
<p>这数据也太坑了。。。。</p>
<p> </p>
<p>@author: Zyzsdy</p>
<p>@Website: <a href="http://www.namido.net" target="_blank">http://www.namido.net</a></p>
<p>@date: 2014/1/18 15:02 (UTC+8)</p>
<p> </p>
<p>感想: 这次CF就过一题居然没扣分。。。。。。</p>
<p>不过我这题差一点就做出来了。。。</p>
<p>。。。。。。。</p>
<p>唉。。。。</p>
</body>
</html>