我们在生命的路上常常绝望 大概是因为弯路走了太多

脚上的泡被磨起又磨破

像我们所有的幻想与梦 起起落落。


所以说 我这道题考场上面和题解想得一模一样啊啊啊啊啊啊啊啊啊啊!!!!!!

但是就是打复杂了啊啊啊啊啊啊啊啊!!!!!!!!!!!!!!!!!!!!

为什么我每次一看到环就感觉自己被耍了啊啊啊啊啊啊!!!!!!

自己的写法大概是有一个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——转圈游戏的更多相关文章

  1. [快速幂][NOIP2012]转圈游戏

    转圈游戏 题目描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置, ...

  2. 3285 转圈游戏 2013年NOIP全国联赛提高组

    3285 转圈游戏 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond       题目描述 Description n 个小伙伴 ...

  3. codevs3285转圈游戏

    传送门 3285 转圈游戏 2013年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Descript ...

  4. 洛谷 P1965 转圈游戏

    洛谷 P1965 转圈游戏 传送门 思路 每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,--,依此类推,第n − m号位置上的小伙伴走到第 0 号 ...

  5. 1617:转圈游戏 ybt

    1617:转圈游戏 时间限制: 1000 ms         内存限制: 524288 KB提交数: 540     通过数: 326 [题目描述] nn 个小伙伴(编号从 00 到 n−1n−1 ...

  6. 题解 【NOIP2013】转圈游戏

    [NOIP2013]转圈游戏 Description n个小伙伴(编号从0到n-1)围坐一圈玩游戏.按照顺时针方向给n个位置编号,从0到n-1.最初,第0号小伙伴在第0号位置,第1号小伙伴在第1号位置 ...

  7. luoguP1965 转圈游戏(NOIP2013)(快速幂)

    luogu P1965 转圈游戏 题目 #include<iostream> #include<cstdlib> #include<cstdio> #include ...

  8. 洛谷P1965 转圈游戏 [2013NOIP提高组 D1T1][2017年6月计划 数论04]

    P1965 转圈游戏 题目描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 ...

  9. 快速幂——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 ...

  10. Java实现 蓝桥杯 算法提高 转圈游戏(暴力快速幂)

    试题 算法提高 转圈游戏 问题描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在 ...

随机推荐

  1. 对于Hibernate的底层浅谈

    哇,我发现忙起来真的是没有时间来写,最近在学框架,感觉特别有兴趣,对于框架的感激就是又恨又爱的感觉,hibernate,没有研究太深,模拟的写了一点底层的实现,其实就是发射吧,我没有追踪源码去看,就是 ...

  2. thinkphp系列:类的自动加载是如何设计的

    在使用框架开发时,可以发现框架有很多核心类,却很少看到显示的引入某个文件的代码,这是因为框架都采用了类的自动加载机制,即使用到类时,框架会自动找到该类所在文件的位置并引入该文件.为了更容易看出代码思路 ...

  3. java 之 抽象工厂模式(大话设计模式)

    看了几次抽象工厂模式,每次查看都需要重新理解一次,可能是涉及的类和接口比较多,所以比较难缕清的关系吧!在笔者看来,我们还是要吸取其思想而不是生搬硬套. 来看下类图: 大话设计模式-类图 看类图已经很乱 ...

  4. java MD5比较文件内容

    最近用到,记下来…… 功能: 对指定目录下的所有TXT文件,通过MD5比较内容,删除掉重复的文件.文件的扩展可以修改成.docx..doc..jpg..png,或者其它类型,根据需求灵活修改. pub ...

  5. Wannafly挑战赛3 record

    B 遇见 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 65536K,其他语言131072K64bit IO Format: %lld题目描述A和B在同一条路上,他们之间的距离为 k ...

  6. PHP基础 windows环境下安装Apache Mysql PHP

    本篇文章主要是讲一下我自己安装wamp环境的一些步骤和见解,前方多图预警,慎入!!!!! PHP运行环境  : Linux下的三种安装方式:源码包安装.rpm包安装.集成环境安装(lnmp) wind ...

  7. lnmp1.3 配置pathinfo---thinkphp3.2 亲测有效

    lnmp1.3环境下配置pathinfo模式试了很多方法,都以失败告终,博主被这个问题困扰了很久,终于解决了!现记录如下: 1.打开php.ini 通常该文件在 /usr/local/php/etc/ ...

  8. 5、C#基础 - C#的值类型

    1.C#的值类型 有几个特点: 存储在栈里 基于值类型的变量直接包含值(值类型存储实际值). 将一个值类型变量赋给另一个值类型变量时,将复制包含的值. 这与引用类型变量的赋值不同,引用类型变量的赋值只 ...

  9. Python的变量及简单数据类型

    Python的变量及简单类型 1.  变量 在Python编程中,变量是用来存放值或对像的容器.变量的名称可以自定义,但需遵循一定的规范,否则可能会引发一些错误.Python的变量可以分为数字.字符和 ...

  10. Wes7 剪裁方法

    1. 加载x64的 DS共享库,加载一个compatibility.xml模板 2. 导入硬件信息文件File—Import—Import PMQ 用TAP.exe工具创建.PMQ文件(.PMQ文件保 ...