题目大意:

有n个人

接下来一行n个数a[i] 表示第i个人描述其他人有a[i]个的帽子跟他不一样

帽子编号为1~n 如果所有的描述都是正确的

输出possible 再输出一行b[i] 表示第i个人的帽子的编号

如果存在矛盾 输出impossible

如果存在p 个人都描述有q个人跟他们的帽子不一样

此时若 p+q=n 说明正确且这p个人的帽子都一样

a[] = 3 3 2 2 2 ,此时一种解为 b[] = 1 1 2 2 2

存在p=2个人描述有q=3个人跟他们不一样 说明这两个人的帽子编号是一样的

但是这种方法存在一种特殊情况

a[] = 4 4 4 4 4 4 ,如果按上面的解法此时则无解

但是实际上存在一种解 即 b[] = 1 1 2 2 3 3

不过可以看出来这种特殊情况 每种帽子对应的人数是一样多的

那么此时存在p=6个人描述有q=4个人跟他们不一样

​可以得到每种帽子对应人数为 t

判断一下p能不能整除t 若能说明描述正确

否则 描述矛盾 impossible

题目要求对应第i个人输出帽子编号  。。英语渣给跪了 错在这里以为不需要对应

不需要对应很好处理 需要对应其实也不难

开了一排栈~

第一种情况 在ans[q]压入一种编号p个

特殊情况 在ans[q]压入p/t种编号t个

最后从每个人的描述arr[i]里取ans[arr[i]]的栈顶输出就行了

#include <bits/stdc++.h>
#define LL long long
#define INF 0x3f3f3f3f
using namespace std;
int n, arr[];
stack <int> ans[];
int main()
{
while(~scanf("%d",&n)) {
for(int i=;i<=n;i++)
while(!ans[i].empty())
ans[i].pop();
map <int,int> mp; mp.clear();
for(int i=;i<n;i++) {
scanf("%d",&arr[i]);
if(!mp.count(arr[i])) mp[arr[i]]=;
else mp[arr[i]]++; // 记录描述为q的人有多少个
}
map <int,int> :: iterator it;
bool OK=; int id=;
for(it=mp.begin();it!=mp.end();it++) {
int q=(*it).first, p=(*it).second;
if(p+q!=n) {
int t=n-q;
if(p%t==) { // 特殊情况
for(int i=;i<p/t;i++) { // 压入p/t种
for(int j=;j<t;j++) // 每种t个
ans[q].push(id);
id++;
}
} else {
OK=; break;
}
}
else { //
while(p--) ans[q].push(id); // 压入一种编号p个
id++;
}
}
if(OK) {
printf("Possible\n");
for(int i=;i<n;i++) {
printf("%d ",ans[arr[i]].top());
ans[arr[i]].pop();
} printf("\n");
} else printf("Impossible\n");
} return ;
}

Avito Cool Challenge 2018 B - Farewell Party的更多相关文章

  1. Avito Cool Challenge 2018 B. Farewell Party 【YY】

    传送门:http://codeforces.com/contest/1081/problem/B B. Farewell Party time limit per test 1 second memo ...

  2. Codeforces Avito Code Challenge 2018 D. Bookshelves

    Codeforces Avito Code Challenge 2018 D. Bookshelves 题目连接: http://codeforces.com/contest/981/problem/ ...

  3. Avito Cool Challenge 2018

    考挂了.. A - Definite Game 直接看代码吧. #include<cstdio> #include<cstring> #include<algorithm ...

  4. Avito Cool Challenge 2018(div1+2)

    A. Definite Game: 题意:输入N,输出最小的结果N-x,其中x不少N的因子. 思路:N=2时,输出2:其他情况输出1:因为N>2时,N-1不会是N的因子. #include< ...

  5. Avito Cool Challenge 2018 Solution

    A. Definite Game 签. #include <bits/stdc++.h> using namespace std; int main() { int a; while (s ...

  6. Avito Cool Challenge 2018 A. B题解

    A. Definite Game 题目链接:https://codeforces.com/contest/1081/problem/A 题意: 给出一个数v,然后让你可以重复多次减去一个数d,满足v% ...

  7. Avito Code Challenge 2018

    第一次打CF,很菜,A了三道水题,第四题好像是是数位DP,直接放弃了.rateing从初始的1500变成了1499,还是绿名,这就很尴尬.之后觉得后面的题目也没有想象的那么难(看通过人数)过两天吧剩下 ...

  8. Avito Cool Challenge 2018 自闭记

    A:n==2?2:1. #include<iostream> #include<cstdio> #include<cmath> #include<cstdli ...

  9. Avito Cool Challenge 2018 E. Missing Numbers 【枚举】

    传送门:http://codeforces.com/contest/1081/problem/E E. Missing Numbers time limit per test 2 seconds me ...

随机推荐

  1. netty的原理

    1. Netty简介 Netty是一个高性能.异步事件驱动的NIO框架,基于JAVA NIO提供的API实现.它提供了对TCP.UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作 ...

  2. tonight i need your body

    wdnmd wdnmd 再lable中我们有几个不同的type参数: text     写的是文本类型的参数 password    不管输入的是什么显示的都是星星 date    输入的是一个日历本 ...

  3. __attribute__((regparm(3))) from GNU C

    在 x86 上,regparm 属性会传递一个数值给编译器,这个数值会告诉编译器要用多少个寄存器来传递函数参数(EAX, EDX 或 ECX,最多 3 个寄存器),通常情况下函数是用堆栈来传递参数的. ...

  4. CentOS7 部署单节点 FastDFS

    准备 环境 系统:CentOS7.5 软件即依赖 libfatscommon FastDFS分离出的一些公用函数包 FastDFS fastdfs-nginx-module FastDFS和nginx ...

  5. Redis 管道(pipeline)

  6. svnadmin - Subversion 仓库管理工具

    SYNOPSIS 总览 svnadmin command /path/to/repos [options] [args] OVERVIEW 概述 Subversion 是一个版本控制系统,允许保存旧版 ...

  7. Ubuntu 14.04 Sublime Text3 Java编译运行(最简单的方法)

    Sublime,结果发现只能编译,无法直接运行,于是就在网上搜解决方法,发现大部分方法都是告诉你要进入Java.sublime-packag这个文件,然后再修改JavaC.sublime-build, ...

  8. SVN版本管理与大型代码上线方案(一)

    SVN版本管理与大型代码上线方案(一) 链接:https://pan.baidu.com/s/1A3Iq3gGkGS27L_Gt37_I0g 提取码:ncy2 复制这段内容后打开百度网盘手机App,操 ...

  9. CodeForces - 337D 树形dp

    题意:一颗树上有且仅有一只恶魔,恶魔会污染距离它小于等于d的点,现在已经知道被污染的m个点,问恶魔在的可能结点的数量. 容易想到,要是一个点到(距离最远的两个点)的距离都小于等于d,那么这个点就有可能 ...

  10. 高德地图的权限Activity代码

    /** * */package com.amap.location.demo; import java.lang.reflect.Method;import java.util.ArrayList;i ...