记录编号 |
342905 |
评测结果 |
AAAAAAAAAA |
题目名称 |
嵌套矩形 |
最终得分 |
100 |
用户昵称 |
sxysxy |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.063 s |
提交时间 |
2016-11-08 20:15:36 |
内存使用 |
4.12 MiB |
显示代码纯文本
- #include <cstdio>
- #include <cstring>
- #include <list>
- #include <queue>
- #include <vector>
- #include <algorithm>
- using namespace std;
- struct rect
- {
- int w, h;
- bool canin(rect &ct)
- {
- return w<ct.w && h<ct.h;
- }
- }rs[1111];
- int G[1001][1001];
- int d[1001];
- int n;
- int ss, tt;
- int calc(int u)
- {
- if(d[u])return d[u];
- d[u] = 1;
- for(int i = 1; i <= n; i++)if(G[u][i])
- d[u] = max(d[u], calc(i)+1);
- return d[u];
- }
- void dfs(int u)
- {
- printf("%d ", u);
- for(int i = 1; i <= n; i++)
- if(G[u][i] && d[u] == d[i]+1)
- {
- dfs(i);
- break;
- }
- }
- int main()
- {
- freopen("qiantao.in", "r", stdin);
- freopen("qiantao.out", "w", stdout);
- scanf("%d", &n);
- for(int i = 1; i <= n; i++)
- {
- scanf("%d %d", &rs[i].w, &rs[i].h);
- if(rs[i].w > rs[i].h)swap(rs[i].w, rs[i].h);
- }
- for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)if(rs[i].canin(rs[j]))
- G[i][j] = 1;
- int l = 0;
- int s;
- for(int i = 1; i <= n; i++)
- if(calc(i) > l)
- {
- l = d[i];
- s = i;
- }
- printf("%d\n", l);
- dfs(s);
- return 0;
- }