GAME——转圈游戏
我们在生命的路上常常绝望 大概是因为弯路走了太多
脚上的泡被磨起又磨破
像我们所有的幻想与梦 起起落落。
所以说 我这道题考场上面和题解想得一模一样啊啊啊啊啊啊啊啊啊啊!!!!!!
但是就是打复杂了啊啊啊啊啊啊啊啊!!!!!!!!!!!!!!!!!!!!
为什么我每次一看到环就感觉自己被耍了啊啊啊啊啊啊!!!!!!
自己的写法大概是有一个head tail记录环的首尾这样比较的时候就可以方便跳 然后我还加了一个-1的处理保证被合并了的不再被处理
考场上改了蛮久不过最后还是爆零啦
标程给出的方法是用了一个l数组和一个r数组
这个数被合并了就把它的r赋给左边的r
就相当于通过lr的操作把它挤掉
好无奈啊这么简单又机智的办法我居然没想到
因为lr数组那边处理起来还是有点问题所以标解是手打快排了的
这是标解
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<queue>
#define inf 2147483647
#define fre(z) freopen(z".in","r",stdin),freopen(z".out","w",stdout)
#define my long long
#define d "%lld"
using namespace std;
;
my getint();
my n;
my a[N+];
my w[N+];
my l[N+],r[N+];
my ans;
void qsort(my,my);
////////////在一个环中每次选择两个相邻元素,分数加上两个元素之差,然后把小的元素移除,问分数之和的最小值是多少
////////////贪心
//证明:
//对于当前环中最小值k以及k的相邻两个元素k_l,k_r
//把他与相邻数操作后一定是自己移除
//然后每次合并后留下的是最大值
//所以如果先合并k_l及k_l左边的元素或k_r及k_r右边的元素,那么合并后k相邻两个元素的值>=k_l,k_r
//所以首先合并k_l或k_r肯定更优
//然后肯定要合并min(k_l,k_r)
//然后直接删除k即可
int main()
{
fre("game");
n=getint();
;i<=n;i++) w[i]=i,a[i]=getint(),l[i]=i-,r[i]=i+;
l[]=n;r[n]=;
qsort(,n);
;T<n;T++) {
my i=w[T];
cout<<i<<" "<<l[i]<<" "<<r[i]<<" "<<a[i]<<endl;
ans+=min(a[l[i]],a[r[i]])-a[i];
l[r[i]]=l[i];r[l[i]]=r[i];
}
printf(d,ans);
;
}
my getint()
{
my w=;
;
char c=getchar();
') && c!='-') c=getchar();
,c=getchar();
+c-',c=getchar();
return q? -w:w;
}
void qsort(my l,my r)
{
my i=l,j=r,mid=a[w[(i+j)>>]];
while (i<=j) {
while (a[w[i]]<mid) i++;
while (a[w[j]]>mid) j--;
if (i<=j) {
w[]=w[i];
w[i]=w[j];
w[j]=w[];
i++;
j--;
}
}
if (i<r) qsort(i,r);
if (l<j) qsort(l,j);
}
然而作为一个彻头彻尾sort党很不服气
于是强行一波
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define N 100030
#define ll long long
using namespace std;
struct hh
{
ll v,id,l,r;
}a[N];
ll ans=,n;
ll b[N];
bool cmp(hh x,hh y){return x.v<y.v;}
int main(){
freopen ("game.in","r",stdin);
freopen ("game.out","w",stdout);
scanf ("%lld",&n);
;i<=n;++i){
scanf ("%lld",&a[i].v);
a[i].id=i,a[i].l=i-,a[i].r=i+;
}
a[].l=n,a[n].r=;
sort(a+,a+n+,cmp);
;i<=n;++i) b[a[i].id]=i;
;i<n;++i){
ans+=min(a[b[a[i].l]].v,a[b[a[i].r]].v)-a[i].v;
a[b[a[i].r]].l=a[i].l,a[b[a[i].l]].r=a[i].r;
}
cout<<ans;
;
}
那么这个悲惨的故事告诉我们处理问题的时候尽量简化
因为想多了要处理的细节多了反而瞬间爆炸
还不如把事情最简化一下
GAME——转圈游戏的更多相关文章
- [快速幂][NOIP2012]转圈游戏
转圈游戏 题目描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置, ...
- 3285 转圈游戏 2013年NOIP全国联赛提高组
3285 转圈游戏 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description n 个小伙伴 ...
- codevs3285转圈游戏
传送门 3285 转圈游戏 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Descript ...
- 洛谷 P1965 转圈游戏
洛谷 P1965 转圈游戏 传送门 思路 每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,--,依此类推,第n − m号位置上的小伙伴走到第 0 号 ...
- 1617:转圈游戏 ybt
1617:转圈游戏 时间限制: 1000 ms 内存限制: 524288 KB提交数: 540 通过数: 326 [题目描述] nn 个小伙伴(编号从 00 到 n−1n−1 ...
- 题解 【NOIP2013】转圈游戏
[NOIP2013]转圈游戏 Description n个小伙伴(编号从0到n-1)围坐一圈玩游戏.按照顺时针方向给n个位置编号,从0到n-1.最初,第0号小伙伴在第0号位置,第1号小伙伴在第1号位置 ...
- luoguP1965 转圈游戏(NOIP2013)(快速幂)
luogu P1965 转圈游戏 题目 #include<iostream> #include<cstdlib> #include<cstdio> #include ...
- 洛谷P1965 转圈游戏 [2013NOIP提高组 D1T1][2017年6月计划 数论04]
P1965 转圈游戏 题目描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 ...
- 快速幂——while理解&&[P1965] 转圈游戏
快速幂--while理解 \[a^k\] 把k转成2进制 \[k=2^n*p[n]+2^(n-1)*p[n-1]+...+2^1*p[1]+2^0*p[0]\] \[a^k=a^(2^n*p[n]+2 ...
- Java实现 蓝桥杯 算法提高 转圈游戏(暴力快速幂)
试题 算法提高 转圈游戏 问题描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在 ...
随机推荐
- mybatis 一对一关联映射实例
在实际项目开发中,经常存在一对一的关系,如一个人对应一张身份证信息,这就是一对一的关系.下面是一个简单的实例: 1.建表过程我就省略了,主要是一张Person表,一张IDCard表,其相关属性见步骤2 ...
- [搜索]ElasticSearch Java Api(一) -添加数据创建索引
转载:http://blog.csdn.net/napoay/article/details/51707023 ElasticSearch JAVA API官网文档:https://www.elast ...
- 「JavaScript」手起刀落-一起来写经典的贪吃蛇游戏
回味 小时候玩的经典贪吃蛇游戏我们印象仍然深刻,谋划了几天,小时候喜欢玩的游戏,长大了终于有能力把他做出来(从来都没有通关过,不知道自己写的程序,是不是能通关了...),好了,闲话不多谈,先来看一下效 ...
- ionic3中 ion-datetime 全屏可点击问题解决方案
废话不多说,能进来的都应该知道是个什么情况.我也是在网上找了一段时间,才在git上ionic官方团队的Issues中找到了问题解决方法. 第一,给外围包上一层ion-item,但是这有个问题,就是会让 ...
- 51Nod 1084 矩阵取数问题 V2 双线程DP 滚动数组优化
基准时间限制:2 秒 空间限制:131072 KB 一个M*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,先从左上走到右下,再从右下走到左上.第1遍时只能向下和向右走,第2遍时只能向 ...
- HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 利用纯CSS美化checkbox和radio和滑动按钮的实现
W3C提供的CheckBox和radio的原始样式非常的丑,而且在不同的额浏览器表现还不一样,使用常规的方法添加样式没法进行修改样式 一, 单选按钮 <html> <head> ...
- 智能合约语言 Solidity 教程系列3 - 函数类型
Solidity 教程系列第三篇 - Solidity 函数类型介绍. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以 ...
- 非常棒的教程记录(UML)
这里暂且记录下看过的非常棒的博客吧! 来自 CSDN 几年前的博客专栏了,我只想说:经典实用的知识永远不会过时! http://blog.csdn.net/column/details/umlmode ...
- 学校的c++程序课程设计(简单的写法 并无太多c++的特色)
好久没更新博客了,最近一直在忙,花了一天时间做出这个简陋版的课程设计, 为了储存,也为了更新,所以于今天更新我的博客. 我选的课程设计题目如下: 某某公司的设备管理系统 功能及要求描述: (1)公司主 ...