广州服装网站建设,网站建设优化培训,做资料上哪个网站好,深圳有什么网站题目 思路 “两蚂蚁碰面会掉头#xff0c;若其中一只蚂蚁感冒了#xff0c;会把感冒传染给碰到的蚂蚁”#xff0c;这句话看作是“两蚂蚁碰面会互相穿过#xff0c;只是把感冒的状态传给了另一只蚂蚁”#xff0c;因为哪只蚂蚁感冒了并不是题目的重点#xff0c;重点是有…题目 思路 “两蚂蚁碰面会掉头若其中一只蚂蚁感冒了会把感冒传染给碰到的蚂蚁”这句话看作是“两蚂蚁碰面会互相穿过只是把感冒的状态传给了另一只蚂蚁”因为哪只蚂蚁感冒了并不是题目的重点重点是有多少蚂蚁感冒了。因此本题可以理解为感冒的蚂蚁一直往一个方向走求共感染了几只蚂蚁 通过观察可以发现若以第一只感冒蚂蚁的位置来分左右界
1. 若感冒蚂蚁向右走由于蚂蚁速度大小相同
在右界向右边走的蚂蚁必定不会被感染向左边走的蚂蚁必定被感染。 在左界若右界有向左走的蚂蚁那么左界向右边走的必定被感染否则不会被感染。向左边走的不会被感染。
2. 若感冒蚂蚁向左走由于蚂蚁速度大小相同
在左界向左边走的蚂蚁必定不会被感染向右边走的蚂蚁必定被感染。 在右界若左界有向右走的蚂蚁那么右界向左边走的必定被感染否则不会被感染。向右边走的不会被感染。 代码
#includebits/stdc.h
using namespace std;int main()
{int n, x, x1;int rtl 0, ltr 0;//右界向左走的蚂蚁左界向右走的蚂蚁cin n;cin x;if (x 0){for (int i 2; i n; i ){cin x1;if (abs(x1) abs(x) x1 0) rtl ;if (abs(x1) abs(x) x1 0) ltr ;}//1表示第一个感冒的蚂蚁int res 1 rtl;if (rtl) res ltr;cout res;}else{for (int i 2; i n; i ){cin x1;if (abs(x1) abs(x) x1 0) ltr ;if (abs(x1) abs(x) x1 0) rtl ;}int res 1 ltr;if (ltr) res rtl;cout res;}return 0;
} 简化版代码
通过上面的代码可以发现当第一只感冒的蚂蚁向右走时只有rtl大于0ltr才能加入到res中若rtl为0那么把rtl加入到res中没有意义。当第一只感冒的蚂蚁向左走时只有ltr大于0rtl才能加入到res中若ltr为0那么把ltr加入到res中没有意义。
#includebits/stdc.h
using namespace std;int main()
{int n, x, x1;cin n;cin x;//以第一只感冒的蚂蚁为界l:向左边走的蚂蚁的数量;r:向右边走的蚂蚁的数量int l 0, r 0;for (int i 2; i n; i ){cin x1;if (abs(x1) abs(x) x1 0) r ;if (abs(x1) abs(x) x1 0) l ;}int res 1;if ((x 0 r) || (x 0 l)) res (r l);cout res;
}