【京东校招笔试】保卫方案
2016-09-18 11:44
148 查看
时间限制:c/c++语言1000MS;其他语言3000MS
内存限制:c/c++语言65536KB;其他语言589824KB
题目描述:
战争游戏的至关重要环节就要到来了,这次的结果将决定王国的生死存亡,小B负责首度的防卫工作。首都处于一个四面环山的盆地,周围的n个小山构成一个环,作为预警措施,小B计划在每个小山上设置一个观察哨,日夜不停的瞭望周围发生的情况。
一旦发生外敌入侵事件,山顶上的岗哨将点燃烽烟。若两个岗哨所在的山峰之间没有更高的山峰遮挡两者之间有相连通路,则岗哨可以观察到另一个山峰上的烽烟是否点燃。由于小山处于环上,任意两个小山之间存在两个不同的连接通路,满足上述不遮挡的条件下,一座山峰上岗哨点燃的烽烟至少可以通过一条通路被另一端观察到。对于任意相邻的岗哨,一端的岗哨一定可以发现一端点燃的烽烟。
小B设计的这种保卫方案的一个重要特性是能够观测到对方烽烟的岗哨对的数量,她希望你能够帮助她解决这个问题。
输入:
输入中有多组测试数据。每组测试数据的第一行为一个整数n(3<=n<=10^6),为首都周围的小山数量,第二行为n个整数,依次表示小山的高度h,(1<=h<=10^9)。
输出:
对每组测试数据,在单独的一行中输出能相互观察到的岗哨的对数
样例输入:
5
1 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);
} //for
int 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;
}
内存限制:c/c++语言65536KB;其他语言589824KB
题目描述:
战争游戏的至关重要环节就要到来了,这次的结果将决定王国的生死存亡,小B负责首度的防卫工作。首都处于一个四面环山的盆地,周围的n个小山构成一个环,作为预警措施,小B计划在每个小山上设置一个观察哨,日夜不停的瞭望周围发生的情况。
一旦发生外敌入侵事件,山顶上的岗哨将点燃烽烟。若两个岗哨所在的山峰之间没有更高的山峰遮挡两者之间有相连通路,则岗哨可以观察到另一个山峰上的烽烟是否点燃。由于小山处于环上,任意两个小山之间存在两个不同的连接通路,满足上述不遮挡的条件下,一座山峰上岗哨点燃的烽烟至少可以通过一条通路被另一端观察到。对于任意相邻的岗哨,一端的岗哨一定可以发现一端点燃的烽烟。
小B设计的这种保卫方案的一个重要特性是能够观测到对方烽烟的岗哨对的数量,她希望你能够帮助她解决这个问题。
输入:
输入中有多组测试数据。每组测试数据的第一行为一个整数n(3<=n<=10^6),为首都周围的小山数量,第二行为n个整数,依次表示小山的高度h,(1<=h<=10^9)。
输出:
对每组测试数据,在单独的一行中输出能相互观察到的岗哨的对数
样例输入:
5
1 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);
} //for
int 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;
}
相关文章推荐
- 【2018校招笔试-京东=java开发】题目1括号匹配方案
- 保卫方案(京东笔试题)
- 2017京东笔试编程题-保卫方案 | Codeforces Beta Round #5 E.Bindian Signalizing
- 保卫方案(京东2017笔试题)
- 2017京东校招笔试编程题--python
- 2017京东校招笔试编程题:进制转换、辗转相除
- 2017年京东校招Java研发笔试编程第1题
- 京东校招前端笔试题:购物车问题
- 京东2015校招笔试题
- 京东2017校招笔试编程题iOS开发工程师
- 2018京东校招Java笔试题
- 京东校招笔试(C++方向)编程题
- 京东2017校招笔试编程题2:进制转换、辗转相除法
- 京东校招笔试题
- 2016年9月5号京东校招笔试编程题
- 校招编程题目(1) C++:括号匹配方案(京东)
- 京东2017实习校招笔试题目-异或实现
- 【2018校招笔试-京东=java开发】题目2 求幂
- 【京东校招笔试】采购单
- 剑指Offer——京东校招笔试题+知识点总结