那个曾经说要在一起永世不分离的人呐
现在又在哪里
在路上
在路上
这题折腾了我好久!第一次做中大的的题目。
这题题目是统计露出水面的岛屿的个数,如果是几个岛屿连在一起的就只算一个,一开始岛屿就是1。
如果一个岛屿的两边都是山的话+1
如果都是水的话-1
其他不用理
思路大概就是这样
注:soj不能用qsort,这个弄得我一直不知道为什么老是显示不能调用函数。所以我用了sort。
题目:http://soj.me/9095
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include <algorithm>
using namespace std;
struct calu
{
int h;
int num;
}a[100005],b[100005]; //这里我开了两个数组,a用来存放排序后的,b用来存放初始的
int Max(int a,int b)
{
if(a>b)return a;
else return b;
}
bool cmp( struct calu kk ,struct calu kt)
{
if(kk.h>kt.h)
return false;
else
return true;
}
int main()
{
int m,i,j,zuo,you,N,flag[100005],fuk,ans;
while(scanf("%d",&N)!=EOF)
{
memset(flag,0,sizeof(flag));
for(i=0;i<N;i++)
{
scanf("%d",&a[i].h);
a[i].num=i;
b[i]=a[i];
}
sort(a,a+N,cmp);
a[N].h=1;
m=1,ans=1;
for(j=0;j<N;) //一个循环
{
fuk=a[j].h;
while(fuk==a[j].h) //这里是找相同的,一般不可能出现10万个相同的所以不用怕超时
{
if(flag[a[j].num]==0)
{
flag[a[j].num]=-1;
you=a[j].num+1; //右标记一直到不同的高度
while(you<N && flag[you]==0 && b[you].h==fuk)
{
flag[you]=-1;
you++;
}
zuo=a[j].num-1; //左标记一直到不同的高度
while(zuo<N && flag[zuo]==0 && b[zuo].h==fuk)
{
flag[zuo]=-1;
zuo--;
}
if((you>=N || flag[you]==-1) && (zuo<0 || flag[zuo]==-1)) //如果一个岛屿的两边都是水的话-1
m--;
if((you<N && flag[you]==0) && (zuo>=0 && flag[zuo]==0)) //如果一个岛屿的两边都是山的话+1
m++;
}
j++;
}
ans=Max(m,ans);
}
printf("%d\n",ans);
}
return 0;
}
分享到:
相关推荐
sicily(soj) 1022 1064 1310 1740 1876 1934 六题的源代码(数据结构综合应用题)
中大sicily编程平台上机考试资料整理,包含考试可能用到的各种算法,很实用!
中大sicily online judge的刷题指南,里面介绍得很详细,不过,最近sicily好像不能外网访问了。
sicily部分源代码,全都亲测,可通过
sicily 1562_LVM.cpp参考代码
本cpp是sicily的1006的解题代码 这份代码以最简单的方式实现了它的功能要求 值得学习一番
112页的大礼包,sicily的部分ac代码。
Sicily的题目分类:各种题目的分类,大致方法,以及题目难度规范
sicily1007题答案,附代码解释,可以在平台上通过
sicily 1274的AC源码,通过且速度快,适合学生使用
中山大学 ACM sicily 1294 题目代码
本程序解决了Sicily平台上Queue的问题,有较好的可读性
对于二叉树T,可以递归定义它的先序遍历、中序遍历和后序遍历如下: PreOrder(T)=T的根节点+PreOrder(T的左子树)+PreOrder(T的右子树) InOrder(T)=InOrder(T的左子树)+T的根节点+InOrder(T的右子树) PostOrder(T)=...
sicily 1817和1818的程序,各有两种方法,供参考。
本程序是中山大学sicily 1004-1007-1010-1014-1021 参考代码
本程序是中山大学sicily-1137-1145-1146-1147-1154-1157-1194的代码
本程序是中山大学sicily上1200-1221-1298-1324-1325的参考代码。
包括 sicily online judge 1149等部分题目,线性表,最小生成树,中缀转后缀并计算后缀表达式等。
此处是sicily 1093,1888 c++的源代码