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控件循环旋转
- (void)viewDidLoad { [super viewDidLoad]; UIButton* ag=[[UIButton alloc]initWithFrame:CGRectMake(sc ...
- JS 保留两位小数问题收集
1.使用四舍五入的方法,保留小数点后的两位小数: toFixed里面的参数表示保留的小数的位数,范围是0-20,超过20位就会报错了 <script> var num=22.127456; ...
- Spring面向切面编程(AOP)方式二
使用注解进行实现:减少xml文件的配置. 1 建立切面类 不需要实现任何特定接口,按照需要自己定义通知. package org.guangsoft.utils; import java.util.D ...
- iOS开发如何学习前端
原文链接 前端大概三大块. HTML CSS JavaScript 基本上每个概念在iOS中都有对应的.HTML请想象成只能拉Autolayout或者设置Frame的ViewController.好比 ...
- Jmeter测试JDBC
Datebase Driver class Database URL MySQL com.mysql.jdbc.Driver jdbc:mysql://host:port/{dbname} Postg ...
- vsftp详细配置(转)
详细配置转载来自以下链接: http://yuanbin.blog.51cto.com/363003/108262 vsftp源码下载(vsftpd-3.0.2.tar.gz): http://dow ...
- test1.A[【dfs简单题】
Test1.A Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 sdut 2274:http://acm.sdut.edu.cn/ ...
- 关于Mesos和Kubernetes的区别
这个主题应该和服务发现注册一样,进入视野...
- bootstrap 入门
bootstrap 入门 <!DOCTYPE html> <html> <head lang="en"> <meta charset=&q ...
- android 入门- 词汇
final Resources.Theme theme = context.getTheme(); TypedArray a = theme.obtainStyledAttributes();获得自定 ...