gym 101657 D
理论1A。 //没删debug的文件读入。。
傻逼题。
先求出来每条边两侧的三角形,然后枚举边,根据叉积判断三角形位置,建图,拓扑排序。
1 #include <bits/stdc++.h> 2 #define pii pair<int,int> 3 using namespace std; 4 typedef double db; 5 const int N = 1e6+6; 6 const db eps = 1e-6; 7 const db pi = acos(-1); 8 int sign(db k){ 9 if (k>eps) return 1; else if (k<-eps) return -1; return 0; 10 } 11 int cmp(db k1,db k2){return sign(k1-k2);} 12 struct point{ 13 db x,y; 14 point operator+(const point &k1)const { return point{k1.x+x,k1.y+y};} 15 point operator-(const point &k1)const { return point{x-k1.x,y-k1.y};} 16 point operator*(const db k1)const { return point{x*k1,y*k1};} 17 point operator / (db k1) const{return (point){x/k1,y/k1};} 18 db abs(){return sqrt(x*x+y*y);} 19 bool operator<(const point k1)const { 20 int a = cmp(x,k1.x); 21 if (a==-1) return 1; else if (a==1) return 0; else return cmp(y,k1.y)==-1; 22 } 23 bool operator== (const point k1)const { 24 return x==k1.x&&y==k1.y; 25 } 26 }; 27 db cross(point k1,point k2){ return k1.x*k2.y-k1.y*k2.x;} 28 db dot(point k1,point k2){ return k1.x*k2.x+k1.y*k2.y;} 29 struct line{ 30 point p[2];//x小的是p[0] 31 line(point k1,point k2){ 32 if(k1<k2) 33 p[0]=k1,p[1]=k2; 34 else 35 p[0]=k2,p[1]=k1; 36 } 37 point &operator[](int k){ return p[k];} 38 bool operator <(const line &k1)const { 39 if(p[0]==k1.p[0]) 40 return p[1]<k1.p[1]; 41 return p[0]<k1.p[0]; 42 } 43 }; 44 struct Tri{ 45 point p[3],o; 46 point &operator[](int k){ return p[k];} 47 }tri[N]; 48 map<line,int> mp; 49 vector<line> L; 50 int cnt = 0; 51 vector<int> g[N*3],f[N]; 52 int deg[N]; 53 int t,n; 54 int main(){ 55 //freopen("awsl.in","r",stdin); 56 scanf("%d",&t); 57 while (t--){ 58 scanf("%d",&n); 59 for(int i=0;i<n;i++){ 60 tri[i].o.x=0,tri[i].o.y=0; 61 for(int j=0;j<3;j++){ 62 scanf("%lf%lf",&tri[i][j].x,&tri[i][j].y); 63 tri[i].o.x+=tri[i][j].x; 64 tri[i].o.y+=tri[i][j].y; 65 } 66 tri[i].o.x/=3,tri[i].o.y/=3; 67 for(int j=0;j<3;j++){ 68 line tmp = line(tri[i][j],tri[i][(j+1)%3]); 69 if(mp.count(tmp)){ 70 g[mp[tmp]].push_back(i); 71 } else{ 72 mp[tmp]=cnt; 73 L.push_back(tmp); 74 g[cnt].push_back(i); 75 cnt++; 76 } 77 } 78 } 79 for(int i=0;i<cnt;i++){ 80 if(g[i].size()<2)continue; 81 int s1 = g[i][0],s2 = g[i][1]; 82 line tmp = L[i]; 83 db t = cross(tmp[1]-tmp[0],tri[s1].o-tmp[0]); 84 if(sign(t)>0){//s1在上面 85 f[s1].push_back(s2); 86 deg[s2]++; 87 } else{ 88 f[s2].push_back(s1); 89 deg[s1]++; 90 } 91 } 92 queue<int> q; 93 for(int i=0;i<n;i++){ 94 if(deg[i]==0) 95 q.push(i); 96 } 97 vector<int> ans; 98 while (!q.empty()){ 99 int t = q.front(); 100 q.pop(); 101 ans.push_back(t+1); 102 for(int i=0;i<f[t].size();i++){ 103 deg[f[t][i]]--; 104 if(deg[f[t][i]]==0) 105 q.push(f[t][i]); 106 } 107 } 108 reverse(ans.begin(),ans.end()); 109 for(auto tmp:ans){ 110 printf("%d ",tmp); 111 } 112 printf("\n"); 113 for(int i=0;i<n;i++){ 114 deg[i]=0; 115 f[i].clear(); 116 } 117 for(int i=0;i<cnt;i++) 118 g[i].clear(); 119 L.clear();mp.clear(); 120 cnt=0; 121 } 122 }
View Code
转载于:https://www.cnblogs.com/MXang/p/10469931.html
gym 101657 D相关推荐
- 强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例
强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例 1. 引言 在这个部分补充之前马尔科夫决策和动态规划部分的代码.在以后的内容我会把相关代码都附到相关内容的后面.本部 ...
- Gym - 102082G
Gym - 102082G https://vjudge.net/problem/2198225/origin 对于数列中任意一个数,要么从最左边到它不递减,要么从最右边到到它不递减,为了满足这个条件 ...
- 安装gym库_强化学习Gym库学习实践(一)
最近看了一篇研究方向相关的文章,介绍了一种DQN的应用,感觉还挺新鲜的.想着把这篇文章复现出来,就开始学习强化学习的相关知识,作为一名小白,这一路走的可是真的十分艰难(我太菜了啊!) 看了莫烦Pyth ...
- 强化学习环境库 Gym 发布首个社区发布版,全面兼容 Python 3.9
作者:肖智清 来源:AI科技大本营 强化学习环境库Gym于2021年8月中旬迎来了首个社区志愿者维护的发布版Gym 0.19.该版本全面兼容Python 3.9,增加了多个新特性. 强化学习环境库的事 ...
- Gym迎来首个完整环境文档,强化学习入门更加简单!
深度强化学习实验室 官网:http://www.neurondance.com/ 论坛:http://deeprl.neurondance.com/ 编辑:OpenDeepRL OpenAI Gym是 ...
- Codeforces Gym 100513G G. FacePalm Accounting 暴力
G. FacePalm Accounting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513 ...
- Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)
原文地址:http://blog.csdn.net/jinzhuojun/article/details/77144590 和其它的机器学习方向一样,强化学习(Reinforcement Learni ...
- OpenAI Gym介绍
上篇博客介绍了OpenAI Gym.OpenAI Gym与强化学习以及OpenAI Gym的安装,接下来运行一个demo体验一下OpenAI Gym这个平台,以CartPole(倒立摆)为例,在工作目 ...
- 独家 | 使用Python的OpenAI Gym对Deep Q-Learning的实操介绍(附学习资源)
作者:ANKIT CHOUDHARY 翻译:张睿毅 校对:吴金笛 本文4300字,建议阅读10+分钟. 本文作者通过实战介绍了Deep Q-Learning的概念. 导言 我一直对游戏着迷.在紧凑的时 ...
最新文章
- Visual Studio 2010 模板缺失
- Java内存访问重排序的研究
- 【372天】我爱刷题系列131(2018.02.12)
- SAP 调用smartforms打印如何统计实际打印状态和打印次数
- 散文绘画集《心欢喜,灵快乐》研讨会在京举行
- codeforces1271 D. Portals(dp or 带悔贪心)
- json-lib的字符串自动转换坑
- Java千百问_05面向对象(004)_java接口到底是什么
- 使用Mac App Store更新、下载软件时出现未知错误的解决方法
- WDS服务不能启动-----Service-specific error code 1056767740
- 【论文笔记】基于强化学习的句子摘要排序
- 【资料】《数字电子技术基础》阎石第五版
- 三星c7000 android8,三星C7000官方固件rom刷机包-C7000ZCU3CRI1 安卓8.0
- 改变elementui的switch宽度、高度
- 你有一份七夕赚钱指南等待签收
- 【OR】ADMMRisk Parity Portfilio Model
- abs、fabs 用法
- 银保监会回应中国金融机构数据被公开售卖:绝大部分系黑客伪造拼凑
- 数据仓库系列(3):数据的价值如何体现
- 2019初创企业投融资服务平台都有哪些?