【题目链接】:http://codeforces.com/contest/534/problem/D

【题意】



n个人依次进入一个房间;

进进来的人会和房间里面没有组队的人握一次手;

(这里的握手只计算主动握手的那个人的握手次数);

(任意时刻,任意3个人都能组队);

给出每个人的握手信息;

问你n个人进入房间的顺序是怎么样的。

【题解】



一开始房间里面一个人都没有;

这个时候,看看哪个人握手的次数为0;

->

房间里面变成了两个人,然后看看哪个人的握手次数为2

->

房间里面变成了三个人,然后看看哪个人的握手次数为3

->



然后如果遇到没有和房间里面的人数相符合的握手数;

就尝试去掉3个人(这3个人就相当于是去掉了);

然后再看看有没有和房间里面人数相对应的握手次数;

以此类推;

如果已经没办法减少人数了,且还有人没有进入房间,且没有人和房间里面的人数的握手数相对应;

则输出无解信息.



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%lld",&x)
#define ref(x) scanf("%lf",&x) typedef pair<int, int> pii;
typedef pair<LL, LL> pll; const int dx[9] = { 0,1,-1,0,0,-1,-1,1,1 };
const int dy[9] = { 0,0,0,-1,1,-1,1,-1,1 };
const double pi = acos(-1.0);
const int N = 2e5+100; int n;
vector <int> v[N],ans;
int bo[N],num,tot; int main()
{
//freopen("F:\\rush.txt", "r", stdin);
rei(n);
rep1(i, 1, n)
{
int x;
rei(x);
bo[x]++;
v[x].push_back(i);
}
while (tot < n)
{
if (!bo[num])
{
while (num >= 3)
{
num -= 3;
if (bo[num]) break;
}
if (!bo[num])
return puts("Impossible"),0;
}
bo[num]--;
ans.push_back(v[num].back());
v[num].pop_back();
num++, tot++;
}
puts("Possible");
rep1(i, 0, tot - 1)
{
printf("%d", ans[i]);
if (i == tot - 1)
puts("");
else
putchar(' ');
}
//printf("\n%.2lf sec \n", (double)clock() / CLOCKS_PER_SEC);
return 0;
}

最新文章

  1. AJAX + WebService 实现文件上传
  2. 开启JMX功能,使JVisvualVM能够连接JVM
  3. Hbase关于Java常用API举例
  4. Java JDBC批处理插入数据操作
  5. 解决:对 PInvoke 函数的调用导致堆栈不对称问题 &lt;转载&gt;
  6. ORM之三:DbProvider与DbFactory
  7. 如何高效使用和管理Bitmap--图片缓存管理模块的设计与实现
  8. JVM性能调优-GC内存模型及垃圾收集算法
  9. 3种创建、调用JavaScript对象的方法
  10. CSS3实战开发 表单发光特效实战开发
  11. poj 2723 Get Luffy Out 二分+2-sat
  12. (Problem 19)Counting Sundays
  13. [Android]Eclipse的使用
  14. Appium基于安卓的各种FindElement的控件定位方法实践和建议
  15. Linux下修改主机IP地址、DNS、主机名的三种方法
  16. MySQL数据库SQL语句基本操作
  17. JavaScript 获得客户端IP
  18. 可视化数据matplotlib之安装与简单折线图
  19. [工具]Cobalt Strike 3.13 TeamServer for Windows
  20. 【Oracle】浅析Oracle中的事务

热门文章

  1. 洛谷 P2693 [USACO1.3]号码锁 Combination Lock
  2. Socket 长连接与短连接,心跳
  3. Python 极简教程(二)编码工具
  4. Android 仿今日头条频道管理(下)(GridView之间Item的移动和拖拽)
  5. angular4开发过程中遇到的问题和知识点记录
  6. shiro 静态页面资源不显示 解决方案(转)
  7. Java反射学习总结四(动态代理使用实例和内部原理解析)
  8. [转] Python 爬虫的工具列表 附Github代码下载链接
  9. 【53.61%】【BZOJ 2302】[HAOI2011]Problem c
  10. Java基本数据类型的取值范围