【京东校招笔试】保卫方案
来源:互联网 发布:如何损坏usb端口 编辑:程序博客网 时间:2024/05/15 11:12
时间限制:c/c++语言1000MS;其他语言3000MS
内存限制:c/c++语言65536KB;其他语言589824KB
题目描述:
战争游戏的至关重要环节就要到来了,这次的结果将决定王国的生死存亡,小B负责首度的防卫工作。首都处于一个四面环山的盆地,周围的n个小山构成一个环,作为预警措施,小B计划在每个小山上设置一个观察哨,日夜不停的瞭望周围发生的情况。
一旦发生外敌入侵事件,山顶上的岗哨将点燃烽烟。若两个岗哨所在的山峰之间没有更高的山峰遮挡两者之间有相连通路,则岗哨可以观察到另一个山峰上的烽烟是否点燃。由于小山处于环上,任意两个小山之间存在两个不同的连接通路,满足上述不遮挡的条件下,一座山峰上岗哨点燃的烽烟至少可以通过一条通路被另一端观察到。对于任意相邻的岗哨,一端的岗哨一定可以发现一端点燃的烽烟。
小B设计的这种保卫方案的一个重要特性是能够观测到对方烽烟的岗哨对的数量,她希望你能够帮助她解决这个问题。
输入:
输入中有多组测试数据。每组测试数据的第一行为一个整数n(3<=n<=10^6),为首都周围的小山数量,第二行为n个整数,依次表示小山的高度h,(1<=h<=10^9)。
输出:
对每组测试数据,在单独的一行中输出能相互观察到的岗哨的对数
样例输入:
51 2 4 5 3
样例输出
7
思路:取两座山峰作为两端,当两端的最小值大于中间山峰中的最大值时,这两座山峰是可以互相瞭望到的。
c++代码
#include<iostream>#include<vector>using namespace std;int n; //小山的数量int location(int num){ //防止位置出界 if(num>=0 && num<n)return num;else if(num<0){return n+num;}else{return num-n;}}int main(){while(cin>>n){vector<int> h; //存小山的高度 for(int i=0; i<n; i++){int tmp;cin>>tmp;h.push_back(tmp);} //forint count=0;for(int i=0; i<n; i++){for(int j=location(i+1); location(j)!=location(i-1); j++){j=location(j);int max=0;for(int k=location(i+1);location(k)!=j; k++){k=location(k);if(h[k]>max)max=h[k];}int min=h[i]<h[j]?h[i]:h[j];if(min>max)count++;}} cout<<count<<endl;}return 0;}
0 0
- 【京东校招笔试】保卫方案
- 保卫方案(京东笔试题)
- 保卫方案(京东2017笔试题)
- 保卫方案
- 保卫方案
- 保卫方案
- [编程题] 保卫方案
- 2017京东笔试编程题-保卫方案 | Codeforces Beta Round #5 E.Bindian Signalizing
- 牛客网 编程题 保卫方案
- 继续跑步,保卫自己
- "保卫钓鱼岛"进展顺利
- 保卫你的
- 保卫艾尔
- 父子对话,你想保卫啥
- 超萌塔防游戏:《保卫萝卜CarrotFantasy》
- 《保卫萝卜》项目实践心得
- nodejs oj在线笔试应对方案(讲几种输入处理方法)
- 笔试Java实现单例设计模式(最优方案)
- Runtime--Property
- Linux命令(8) sed
- 转:java synchronized详解
- Linux_通过OpenSSH远程登录时的延迟问题解决
- asp.net mvc4 session is null
- 【京东校招笔试】保卫方案
- 使用Handler在子线程中更新UI
- codeforces ant man 366 div1b
- listView三级联动
- oracle错误解决
- ReactNative 大图手势浏览技术分析
- offset client style 之间的区别
- hdu 5889 最短路最小割 2016 qingdao regional online
- 追着嘟嘟学c#系列入门第十二篇-----c#的for语句【蓝鸥出品】