@ 蓝桥杯 练习系统 历届试题 PREV-27
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。
每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。
当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。
这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。
请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。
输入格式
第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。
接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了。
输出格式
要求输出1个整数,表示最后感冒蚂蚁的数目。
测试样例1
Input:
3
5 -2 8
Output:
1
测试样例2
Input:
5
-10 8 -20 12 25
Output:
3
ACcode:
import java.io.IOException;
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
InputReader in = new InputReader(System.in, " ");
int n = in.nextInt(), T = in.nextInt(), x, tl = 1, tr = 1, nl = 0, nr = 0;
boolean flag = T > 0; T = abs(T);
while (n-- > 1) {
x = in.nextInt();
if (x > 0 ^ flag) {
if (abs(x) < T) nl++;
else nr++;
} else {
if (abs(x) > T) tr++;
else tl++;
}
}
System.out.print(flag? tl + nr: tr + nl);
}
static int abs(int a) { return a > 0? a: -a; }
static class InputReader {
BufferedReader read;
StringTokenizer tok;
String delimiters;
InputReader(InputStream in) { this(in, " \n\t\r\f"); }
InputReader(InputStream in, String delimiters) {
this.read = new BufferedReader(new InputStreamReader(in));
this.tok = new StringTokenizer("", this.delimiters = delimiters);
}
String next() {
while (!tok.hasMoreTokens())
try {
tok = new StringTokenizer(read.readLine(), delimiters);
} catch (IOException e) { }
return tok.nextToken();
}
int nextInt() { return Integer.parseInt(next()); }
}
}
啊这,这题该怎么打标签
以感冒蚂蚁为基准为其他蚂蚁打上标签并统计个数:
同向左
同向右
不同向左
不同向右
然后根据感冒蚂蚁行进的方向输出它们的组合就行
啊这,这题该怎么打标签
那就算贪心吧