codeforces733D. Kostya the Sculptor 偏序cmp排序,数据结构hash,代码简化
对于n==100。1,1,2或者1,2,2大量重复的形状相同的数据,cmp函数最后一项如果表达式带等于,整个程序就会崩溃
还没有仔细分析std::sort的调用过程,所以这里不是很懂。。,mark以后研究
因为题目让你挑一到两个平行六面体,然后去每个平行六面体长宽高的最小值,然后去求最小值中的最大值
我们很容易想到暴力的做法,如果两个平行六面体能够合并的话,那我们直接计算合并之后的最小值,因为我们知道此时
合并之后再求最小值,它是只增不减的
那么我们就要找到能合并某一个面的所有平行六面体的集合,
这里有一个令人模糊的地方,那就是对于每一个平行六面体,我们选它的哪一个面呢,当然只有三个不同的面
我们发现了以下事实
1,2,3==3,2,1==2,3,1尺寸的平行六面体是同一个东西,但是这个给我们带来了很大的困扰。。
因为我们会把同一个东西当成不同的考虑3遍,而每一遍我们起初还会考虑三个面。。很乱。。
但是仔细一想,我们其实不用考虑1,2和1,3这两个面,因为你叠加这两个平行六面体,只增加次大值或者最大值
最小值没变。。而只有最小值对答案有贡献,所以说我们要让除了最小值的另外两个尺寸构成平面然后去考虑能不能和其他的
平行六面体叠加,增加最小值,从而达到增大对答案贡献的目的
所以我们需要把每个平行六面体的size从小到大排序,然后我们希望对平行六面体整体排序,然后次大值和最大值相等的尽量挨在一起
这样就好处理了,这个就是字典序了,看你侧重哪个元素的优先选取,仔细想想就能懂了
本次代码经验,记得切换目录到源文件根目录,否则会报错。。能用数组索引操作的变量(下标操作)我们就尽量不起别名,用for简单操作
代码:
- #include <cstdio>
- #include <algorithm>
- using namespace std;
- int n;
- const int maxn=1e5+;
- struct node{
- int a[];
- int index;
- };
- bool cmp(node a,node b){
- if(a.a[]!=b.a[]){
- return a.a[]<b.a[];
- }
- if(a.a[]!=b.a[]){
- return a.a[]<b.a[];
- }
- // if(a.a[2]!=b.a[2]){
- // return a.a[2]<b.a[2];
- // }
- return a.a[]<b.a[];
- //全部相等的时候因该返回什么
- //目前我是这么理解的
- //如果cmp为真则sort不交换,如果sort为假那我们就交换
- //当完全相等的时候,我认为没有什么必要交换
- //我们应该按照2,1,0的顺序来排列?
- //事实证明有等于号好像不行呢。。
- }
- node A[maxn];
- bool check(int pre,int next){
- node a=A[pre],b=A[next];
- if(a.a[]==b.a[]&&a.a[]==b.a[]) return true;
- return false;
- }
- int main(){
- scanf("%d",&n);
- register int i;
- //int temp[3];
- // printf("there1\n");
- for(i=;i<n;++i){
- scanf("%d%d%d",&A[i].a[],&A[i].a[],&A[i].a[]);
- sort(A[i].a,A[i].a+);
- A[i].index=i+;
- }
- // printf("there2\n");
- sort(A,A+n,cmp);
- //debug
- // for(i=0;i<n;++i){
- // printf("p:%d %d %d\n",A[i].a[0],A[i].a[1],A[i].a[2]);
- // }
- // printf("there3\n");
- int ans,first=;
- int ans1=-,ans2=-;
- for(i=;i<n;++i){
- // printf("there4 i:%d\n",i);
- int mi=A[i].a[];
- if(first){
- first=;
- ans=mi;
- ans1=A[i].index;
- ans2=-;//第一次初始化的时候更新不全
- }
- else{
- if(mi>ans){
- ans=mi;
- ans1=A[i].index;
- ans2=-;
- }
- }
- if(i+<n&&check(i,i+)){
- int now=A[i].a[]+A[i+].a[];
- mi=min(A[i].a[],min(A[i].a[],now));
- if(mi>ans){
- ans=mi;
- ans1=A[i].index;
- ans2=A[i+].index;
- }
- }
- }
- if(ans2==-){
- printf("1\n%d\n",ans1);
- }
- else{
- printf("2\n%d %d\n",ans1,ans2);
- }
- return ;
- }
codeforces733D. Kostya the Sculptor 偏序cmp排序,数据结构hash,代码简化的更多相关文章
- CF733D Kostya the Sculptor[贪心 排序]
D. Kostya the Sculptor time limit per test 3 seconds memory limit per test 256 megabytes input stand ...
- Codeforces378 D Kostya the Sculptor(贪心)(逻辑)
Kostya the Sculptor time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #378 (Div. 2) D - Kostya the Sculptor
Kostya the Sculptor 这次cf打的又是心累啊,果然我太菜,真的该认真学习,不要随便的浪费时间啦 [题目链接]Kostya the Sculptor &题意: 给你n个长方体, ...
- Kostya the Sculptor
Kostya the Sculptor 题目链接:http://codeforces.com/problemset/problem/733/D 贪心 以次小边为第一关键字,最大边为第二关键字,最小边为 ...
- Codeforces Round #378 (Div. 2) D. Kostya the Sculptor map+pair
D. Kostya the Sculptor time limit per test 3 seconds memory limit per test 256 megabytes input stand ...
- cmp排序hdoj 1106排序
上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助.今天在这里和大家一起学习一下cmp排序 /*标题还是比拟的水吧,但是花的时间还是比拟的多,心不够静*/ #include <iostrea ...
- Python实现各种排序算法的代码示例总结
Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...
- 专题 查找与排序的Java代码实现(一)
专题 查找与排序的Java代码实现(一) 查找(Searching) 线性查找(linear search) 属于无序查找算法,适合于存储结构为顺序存储或链接存储的线性表. 基本思想:从数据结构线形表 ...
- php四种排序算法实现代码
分享php排序的四种算法与代码. 冒泡:function bubble_sort($arr){ $num = count($arr); for($i=0;$i<$num;$i++){ for($ ...
随机推荐
- iOS self = [super init]
self = [super init] 这个问题一直不太明白,今天研究了一下,在stackoverflow找到了下面的答案: http://stackoverflow.com/questions/29 ...
- 在linux环境编译boost
1.在boost官网:http://www.boost.org/下载相应版本的boost 2.解压boost到相应目录,在boost跟目录下有b2可执行程序,可以通过输入命令“/b2 --help”, ...
- Java中hashCode()方法以及HashMap()中hash()方法
Java的Object类中有一个hashCode()方法: public final native Class<?> getClass(); public native int hashC ...
- codeforces 518B. Tanya and Postcard 解题报告
题目链接:http://codeforces.com/problemset/problem/518/B 题目意思:给出字符串 s 和 t,如果 t 中有跟 s 完全相同的字母,数量等于或者多过 s,就 ...
- 【leetcode】Maximal Rectangle (hard)★
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...
- 【编程之美】CPU
今天开始看编程之美 .第一个问题是CPU的使用率控制,微软的问题果然高大上,我一看就傻了,啥也不知道.没追求直接看答案试了一下.发现自己电脑太好了,4核8线程,程序乱飘.加了一个进程绑定,可以控制一个 ...
- 【python】SQLAlchemy
来源:廖雪峰 对比:[python]在python中调用mysql 注意连接数据库方式和数据操作方式! 今天发现了个处理数据库的好东西:SQLAlchemy 一般python处理mysql之类的数据库 ...
- Qt 安装一个Service
QString command = "sc create YourServiceName binPath= \""+application_path+"\&qu ...
- self dismissModalViewControllerAnimated:YES 无效(dismissviewcontrolleranimated无效)
作为一个viewController(VC),想要消失的时候可以从parent VC里面调用dismissModalViewControllerAnimated来消去改VC,也可以在该VC里面手动调用 ...
- 建立controller
复制controller,重建controller 改: @Controller("[productController]") @RequestMapping("/[pr ...