[蓝桥杯] 蚂蚁感冒
[藍橋杯] 螞蟻感冒
峰值內存消耗 < 256M CPU消耗? < 1000ms
【題目描述 - Problem Description】
??? 長100厘米的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。
??? 每只螞蟻都只能沿著桿子向前爬,速度是1厘米/秒。
??? 當兩只螞蟻碰面時,它們會同時掉頭往相反的方向爬行。
??? 這些螞蟻中,有1只螞蟻感冒了。并且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。
??? 請你計算,當所有螞蟻都爬離桿子時,有多少只螞蟻患上了感冒。
| 【輸入 - Input】 | 【輸出 - Output】 |
| 第一行輸入一個整數n (1 < n < 50), 表示螞蟻的總數。 ??? 接著的一行是n個用空格分開的整數 Xi (-100 < Xi < 100), Xi的絕對值,表示螞蟻離開桿子左邊端點的距離。正值表示頭朝右,負值表示頭朝左,數據中不會出現0值,也不會出現兩只螞蟻占用同一位置。其中,第一個數據代表的螞蟻感冒了。 | ??? 要求輸出1個整數,表示最后感冒螞蟻的數目。 |
?
| 【輸入樣例?1?- Sample Input 1】 | 【輸出樣例?1?- Sample Output 1】 |
| 3 5 -2 8 | 1 |
| 【輸入樣例?2?- Sample Input 2】 | 【輸出樣例 2?- Sample Output 2】 |
| 5 -10 8 -20 12 25 | 3 |
?【題解】
模擬,畫個圖出來大概就清楚了,約等于計數排序。
例如
5
-10 8 -20 12 25
朝左的統計比10小的,朝右的統計比10大的,然后個數相加就是染病螞蟻的答案。
其他情況就以此類推,上面8與10配對,如果沒有配對,直接輸出1。
【代碼 C++】
1 #include <cstdio> 2 int main(){ 3 int R, L, Ri, Li, n, a, i; 4 scanf("%d%d", &n, &a); 5 if (a > 0) R = a, Ri = 1, Li = 0; 6 else L = a, Li = 1, Ri = 0; 7 if (Ri){ 8 for (i = 1; i < n; ++i){ 9 scanf("%d", &a); 10 if (a>0 && a < R) ++Ri; 11 else if (a < 0 && a + R < 0) ++Li; 12 } 13 if (Li) printf("%d", Ri + Li); 14 else puts("1"); 15 } 16 else{ 17 for (i = 1; i < n; ++i){ 18 scanf("%d", &a); 19 if (a>0 && a + L < 0) ++Ri; 20 else if (a < L) ++Li; 21 } 22 if (Ri) printf("%d", Ri + Li); 23 else puts("1"); 24 } 25 return 0; 26 }【可測評地址】http://acmore.cc/problem.php?id=1614
轉載于:https://www.cnblogs.com/Simon-X/p/5304467.html
總結
以上是生活随笔為你收集整理的[蓝桥杯] 蚂蚁感冒的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mcgs组态软件中字体如果从左到右变化_
- 下一篇: easyui首页模板