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 号小伙伴在 ...
随机推荐
- Windows下安装BeautifulSoup
python版本为2.7 1.去官网下载BeautifulSoup4 Beautiful Soup 4.3.2 2.解压文件 将下载得到的压缩包解压到任意文件夹,路径不含中文 3.打开cmd命令提示符 ...
- Windows系统重装
http://www.ishuo.cn/show/76437.htmlhttp://jingyan.baidu.com/article/d8072ac45d4f60ec95cefdaa.html
- Zabbix 3.0 基础介绍 [一]
zabbix 简介 Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费的技术支持赢利 zab ...
- Cracking the Coding Interview 题目分析笔记—— Array and String
1.Determine if a string has all unique characters learn: 为了减少空间利用率,其比较优秀的算法一般都适用位操作 返回值的命名方法,我们需要学习 ...
- 数据库 SQL Server2012安装步骤详解
这篇文章主要给大家讲解一下数据库SQL Server2012的安装步骤(若有雷同纯属巧合,还望谅解!) 在正式安装之前,我们需要进行两个设置: ① 首先需要关闭Windows防火墙,若不关闭,后续的安 ...
- Java并发编程总结4——ConcurrentHashMap在jdk1.8中的改进
一.简单回顾ConcurrentHashMap在jdk1.7中的设计 先简单看下ConcurrentHashMap类在jdk1.7中的设计,其基本结构如图所示: 每一个segment都是一个HashE ...
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...
- hibernate5(9)注解映射[1]多对一单向关联
在博客站点中,我们可能须要从某一篇文章找到其所关联的作者.这就须要从文章方建立起对用户的关联,即是多对一的映射关系. 如今先看一个配置实例:我们的文章实体类 package com.zeng.mode ...
- POJ 3616 Milking Time DP题解
典型的给出区间任务和效益值,然后求最大效益值的任务取法. 属于一维DP了. 一维table记录的数据含义:到当前任务的截止时间前的最大效益值是多少. 注意. 这表示当前任务一定要选择,可是终于结果是不 ...
- hdu2993之斜率dp+二分查找
MAX Average Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...