2015年ALPC暑期专题练习I (计算几何) J Kadj Squares
2015-07-22 12:32
344 查看
先求出矩形放置后与x轴的交点横坐标,再找到左边矩形最右端的横坐标和右边矩形最左边的横坐标,注意初始化。
一直WR的代码修改到AC真是不容易,submit十多次。
一直WR的代码修改到AC真是不容易,submit十多次。
#include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<string> #include<map> #include<set> #include<algorithm> #include<vector> #include<sstream> #include<cmath> using namespace std; /**********************************************************/ const int MAX_NUM = 100; /**********************************************************/ int min_2 (int x,int y) {return x<y?x:y;} int max_2 (int x,int y) {return x>y?x:y;} int sideLength[MAX_NUM],squareDown[MAX_NUM]; /**********************************************************/ int main() { freopen ("in.txt","r",stdin); int n; while (scanf ("%d",&n)&&n) { for (int i=0;i<n;i++) scanf ("%d",&sideLength[i]); //所有边长扩大根号2倍 squareDown[0]=sideLength[0]; for (int i=1;i<n;i++){ int nowCoord=0; for (int j=0;j<i;j++){ nowCoord = max_2 (nowCoord,squareDown[j]+sideLength[j]-abs(sideLength[i]-sideLength[j])+sideLength[i]); /*if (sideLength[i]>sideLength[j]) nowCoord = max_2(nowCoord,squareDown[j]+2*sideLength[j]); else nowCoord = max_2(nowCoord,squareDown[j]+2*sideLength[i]);*/ } squareDown[i]=nowCoord; } /* for (int i = 0; i < n; i++){ printf ("-%d\n",squareDown[i],sideLength[i]); } prinf ("\n"); */ vector<int> pt; int x1,x2; for (int i=0;i<n;i++){ x1=squareDown[i]-sideLength[i]; x2=squareDown[i]+sideLength[i]; for (int j=0;j<i;j++) if (sideLength[j]>sideLength[i]) x1=max_2(x1,squareDown[j]+sideLength[j]); for (int j=i+1;j<n;j++) if (sideLength[j]>sideLength[i]) x2=min_2(x2,squareDown[j]-sideLength[j]); if (x1<x2){ pt.push_back (i+1); //printf ("%d-%d %d\n",i+1,x1,x2); } } int len=pt.size (); for (int i=0; i<len; i++){ printf ("%d",pt[i]); if (i<len-1) printf (" "); else printf ("\n"); } //printf ("\n"); } return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++ Custom Control控件向父窗体发送对应的消息
- C++中拷贝构造函数的应用详解