Example 1
input
8
1 2 7 3 4 8 5 6
output
7Example 2
input
6
25 1 2 3 14 36
output
2

题目大意:

    MAX假定鲨鱼连续几天没游过k米(严格小于k),这几天游过的点视作同一块岛屿,现在问:选取一个最小
的k,使得岛屿数,并且在每一块岛屿所花的天数相等

分析:

    以a[i]从小到大进行筛选,用并查集的思想,将a[i]中小于k的天数合并成一块岛,再在所有的k里选择一个最
优解,但是必须注意,要检查下这个岛屿数是不是合法的

code:

#define debug
#include<bits/stdc++.h>
#define pb push_back
#define dbg(x) cout<<#x<<" = "<<(x)<<endl;
#define lson l,m,rt<<1
#define cmm(x) cout<<"("<<(x)<<")";
#define rson m+1,r,rt<<1|1
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll>PLL;
typedef pair<int,ll>Pil;
const ll INF = 0x3f3f3f3f;
const ll inf=0x7fffffff;
const double eps=1e-8;
const int maxn =1e6+10;
const int N = 510;
const ll mod=1e9+7;
const ll MOD=1e9;
//------
//define
int pre[maxn],sz[maxn],cnt[maxn];
int tot,ans,res;
struct node {int val,id;node(int val=0,int id=0):val(val),id(id) {}bool operator <(const node &a)const {return val<a.val;}
} v[maxn];
//findset
int findset(int x) {return pre[x]==x?x:findset(pre[x]);
}
//unite
void unite(int x,int y) {int px=findset(x),py=findset(y);if(px==py)return;//由于px,py之间的岛屿合并,所以sz[px]和sz[py]的天数的岛屿数减少 cnt[sz[px]]--;cnt[sz[py]]--;pre[px]=py;//合并之后的总天数 sz[py]+=sz[px];cnt[sz[py]]++;tot--;
}
//init
void init(int n){for(int i=1;i<=n+1;i++){pre[i]=i;}
}
//solve
void solve() {int n;while(cin>>n) {ans=res=0;for(int i=0; i<n; i++) {int val;cin>>val;v[i]=node(val,i+1);}init(n);sort(v,v+n);tot=0;for(int i=0;i<n;i++){int ind=v[i].id;int u=findset(ind);sz[u]++;tot++;cnt[sz[u]]++;//sz[]如果不为0说明a[ind-1]比目前的a[ind]的小 if(sz[findset(ind-1)]){unite(ind,ind-1);}if(sz[(findset(ind+1))]){unite(ind,ind+1);}//cnt[sz[u]]表示以u为k-1,如果岛屿数目对不上tot说明此划分每块岛屿的天数不等 if(cnt[sz[u]]==tot&&tot>ans){ans=tot;res=v[i].val;}}cout<<res+1<<endl;memset(sz,0,sizeof(sz));memset(cnt,0,sizeof(cnt));}
}int main() {ios_base::sync_with_stdio(false);
#ifdef debugfreopen("in.txt", "r", stdin);
//  freopen("out.txt","w",stdout);
#endifcin.tie(0);cout.tie(0);solve();/*#ifdef debugfclose(stdin);fclose(stdout);system("out.txt");#endif*/return 0;
}

转载于:https://www.cnblogs.com/visualVK/p/9091903.html

Codeforces Round #484 (Div. 2) D. Shark相关推荐

  1. Codeforces Round #484 (Div. 2) A. Row

    Example 1 input 3 101 output YesExample 2 input 4 1011 output NoExample 3 input 5 10001 output No 题目 ...

  2. Codeforces Round #484 (Div. 2) E. Billiard

    题目大意: 有一个方形区域,四个角各有一个口袋,在(x,y)出有一小球,以Vx,Vy速度击出,碰到边界会像光路一样反 弹,问最先掉到哪个口袋里 分析: 其实问题的关键在于将反射线段利用光路的性质转换成 ...

  3. Codeforces Round #484 (Div. 2) C. Cut 'em all!

    Example 1 input 4 2 4 4 1 3 1 output 1Example 2 input 3 1 2 1 3 output -1Example 3 input 10 7 1 8 4 ...

  4. Codeforces Round #541 (Div. 2)

    Codeforces Round #541 (Div. 2) 题号 题目 知识点 A Sea Battle 思维 B Draw! 贪心模拟 C Birthday 思维 D Gourmet choice ...

  5. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  6. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  7. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  8. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  9. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  10. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

最新文章

  1. war包解压不了_牛骨高汤的熬制方法,拿走不谢!有了这配方,还愁开不了小吃店?...
  2. [导入]注意!玩具也能成危险
  3. centos安装时各个版本的含义
  4. [wp7游戏]wp7~~飞行射击精品游戏~~集合贴
  5. 图解Android - Zygote, System Server 启动分析
  6. LeetCode 158. 用 Read4 读取 N 个字符 II
  7. Java类型推断将不再支持可变性规范
  8. 永恒之蓝漏洞原理 445_不死的EternalBlue(永恒之蓝)
  9. ccs是轮_CCS-船型标准.pdf
  10. sql有循环吗_我把 SQL 执行效率提高了 10,000,000 倍!
  11. Python 工匠: 异常处理的三个好习惯
  12. 使用vue element-ui 打印组件
  13. 二分排序(java)
  14. 2020年中国微特电机行业现状、竞争格局及未来发展趋势分析,我国产量达全球70%,技术与发达国家仍有差距「图」
  15. 一套ThinkPHP微信小程序商城源码带后台管理
  16. 市政管网检测机器人收费标准_疏通市政管道 市政管网检测 机器人管道检测价格...
  17. 计算机网络——常见协议
  18. 暑期作息时间表模板_最新暑假作息时间表excel模板-暑假作息时间模板
  19. 计算机专业考研是英语几,计算机考研考英语一还是英语二
  20. 《研发企业管理——思想、方法、流程和工具》——第1章 企业管理基本理念 1.1 企业的根本目标及其内涵...

热门文章

  1. 游戏开发之C++异常(C++)
  2. 其他综合-使用Xshell远程连接管理Linux实践
  3. Mosquitto --topic
  4. 51nod 1135 原根(原根)
  5. 基于音形码的中文字符串相似度算法(转)
  6. Android中Java与web通信
  7. android手机安全:被攻陷的一个场景
  8. 我用微笑剪辑我的微电影 ---六月实习总结
  9. 【转】js获取浏览器信息和客户端硬件信息
  10. 〖Linux〗VirtualBox修改虚拟电脑硬盘(vdi)空间大小