From CodeForces Contests #223 Div. 2 Problem B
话说这次CF两道水题啊。。。可惜没有把握好机会。
按照这样的趋势,我已经预感到了我的排名会继续往下掉,直到无尽的灰色。。。。。
感觉这题是Special Judge
的(←所以我连最后的空格都没删)。。。。我觉得我完全没读懂题目是如何要求最后输出的就根据题目要求做了几个字符串输出居然就AC了。。。
方法更是简单粗暴:先排个序,然后建一张表,把数组中的数字当作键名,出现次数作为值。然后按照键名从大到小输出两次,分别存入两个表里。
然后判断顶部是不是相同,如果相同就弹掉一个。
然后把其中一个表倒序。两个表合并。输出。
如果使用C++来写这题,用和我相同的方法可以使用STL的map容器。map容器是自动按照键名从小到大排序的,所以并不需要处理排序的问题。
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
| <?php
$in=fgets(STDIN); $in=intval($in); $str=fgets(STDIN); $arr=explode(" ", $str); foreach ($arr as &$va) { $va=intval($va); }
rsort($arr);
$ans=array(); foreach($arr as $v){ if(empty($ans[$v])){ $ans+=array($v=>1); }else{ $ans[$v]++; } }
$i=0; $tar=array(); foreach ($ans as $k=>&$v) { if($v!=0){ $tar[$i]=$k; $v--; $i++; } }
$i=0; $car=array(); foreach ($ans as $k=>&$v) { if($v!=0){ $car[$i]=$k; $v--; $i++; } }
if($tar[0]==$car[0]) unset($tar[0]);
$car=array_reverse($car);
$num=count($tar)+count($car); echo $num."n"; foreach ($car as $v) { echo $v." "; } foreach ($tar as $v) { echo $v." "; }
?>
|