2002-2003 ACM-ICPC Northeastern European Regional Contest (NEERC 02)
2015-09-04 23:34
555 查看
B Bricks 计算几何乱搞
题意:
给你个立方体,问你能不能放进一个管道里面。题解:
这是一道非常迷的题,其问题在于,你可以不正着放下去,你需要斜着放。此时你需要枚举你旋转的角度,来判断是否可行。至于枚举的范围和步长,看脸乱搞。代码:
//#include<iostream> #include<fstream> #include<cstring> #include<vector> #include<algorithm> #include<cstdio> #include<string> #include<cmath> #define MAX_N 10004 using namespace std; int N,M,K; int d[4]; struct knife { public: int from, to, dir; knife(int f, int t, int d) : from(f), to(t), dir(d) { } knife() { } }; knife kn[MAX_N]; int cnt[MAX_N]; vector<int> G[MAX_N]; int main() { ifstream cin("inlay.in"); ofstream cout("inlay.out"); cin.sync_with_stdio(false); cin >> M >> N >> K; d[0] = 2 * M + 1; d[1] = 1; d[2] = M + 1; d[3] = M; for (int i = 0; i < K; i++) { int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; if (y1 > y2 || (y1 == y2 && x1 > x2)) { swap(x1, x2); swap(y1, y2); } int u = x1 * d[1] + y1 * d[0]; int v = x2 * d[1] + y2 * d[0]; int t; if (x1 == x2)t = 0; else if (y1 == y2)t = 1; else if (x2 > x1)t = 2; else t = 3; kn[i] = knife(u, v, t); } kn[K++] = knife(0, M, 1); kn[K++] = knife(N * d[0], N * d[0] + M * d[1], 1); kn[K++] = knife(0, N * d[0], 0); kn[K++] = knife(M, N * d[0] + M, 0); for (int i = 0; i < K; i++) { int u = kn[i].from, v = kn[i].to, t = kn[i].dir; while (u != v) { cnt[u]++; u += d[t]; } cnt[v]++; } int V = -1; for (int i = 0; i < K; i++) { int u = kn[i].from, v = kn[i].to, t = kn[i].dir; int p = u; while (u != v) { u += d[t]; if (cnt[u] > 1) { V = max(V, u); V = max(V, p); G[p].push_back(u); G[u].push_back(p); p = u; } } } int ans = 0; V++; for (int u = 0; u < V; u++) sort(G[u].begin(), G[u].end()); for (int u = 0; u < V; u++) for (auto v:G[u]) for (auto c:G[v]) { if (c == u)continue; int t = lower_bound(G[c].begin(), G[c].end(), u) - G[c].begin(); if (G[c][t] == u)ans++; //cout<<c<<" "<<u<<" "<<v<<endl; } cout << ans/6 << endl; return 0; }
View Code
相关文章推荐
- Linux下安装JDK
- get_optlong用法(linux解析命令行参数)
- Linux程序设计-读书笔记2
- 2002-2003 ACM-ICPC Northeastern European Regional Contest (NEERC 02) H Heroes Of Might And Magic (隐含dp)
- 让nginx作为图片处理服务器
- Linux开机流程
- 分析Linux Apache为何访问过慢
- 如何查看linux系统是32位还是64位
- Linux下编程-----文件与IO(二)stat函数
- Linux下进程线程,Nignx与php-fpm的进程线程方式
- Linux下安装Tomcat服务器和部署Web应用
- Tomcat源码阅读系列(六)类加载器
- 反锯齿渲染--TXAA
- shell字符串截取
- 树莓派 opencv 安装 与 更新软件源
- 分享《学习linux几点忠告》
- Understanding the Linux Kernel
- 使用Putty连接Ubuntu虚拟机
- xpath学习(一)
- Linux系统管理 --磁盘管理与系统管理