Avito Cool Challenge 2018 B - Farewell Party
题目大意:
有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的更多相关文章
- 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 ...
- Codeforces Avito Code Challenge 2018 D. Bookshelves
Codeforces Avito Code Challenge 2018 D. Bookshelves 题目连接: http://codeforces.com/contest/981/problem/ ...
- Avito Cool Challenge 2018
考挂了.. A - Definite Game 直接看代码吧. #include<cstdio> #include<cstring> #include<algorithm ...
- Avito Cool Challenge 2018(div1+2)
A. Definite Game: 题意:输入N,输出最小的结果N-x,其中x不少N的因子. 思路:N=2时,输出2:其他情况输出1:因为N>2时,N-1不会是N的因子. #include< ...
- Avito Cool Challenge 2018 Solution
A. Definite Game 签. #include <bits/stdc++.h> using namespace std; int main() { int a; while (s ...
- Avito Cool Challenge 2018 A. B题解
A. Definite Game 题目链接:https://codeforces.com/contest/1081/problem/A 题意: 给出一个数v,然后让你可以重复多次减去一个数d,满足v% ...
- Avito Code Challenge 2018
第一次打CF,很菜,A了三道水题,第四题好像是是数位DP,直接放弃了.rateing从初始的1500变成了1499,还是绿名,这就很尴尬.之后觉得后面的题目也没有想象的那么难(看通过人数)过两天吧剩下 ...
- Avito Cool Challenge 2018 自闭记
A:n==2?2:1. #include<iostream> #include<cstdio> #include<cmath> #include<cstdli ...
- Avito Cool Challenge 2018 E. Missing Numbers 【枚举】
传送门:http://codeforces.com/contest/1081/problem/E E. Missing Numbers time limit per test 2 seconds me ...
随机推荐
- 高级UI晋升之自定义View实战(五)
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从自定义View利器Canvas和Paint来进行详解 一.Canvas ...
- __attribute__((regparm(3))) from GNU C
在 x86 上,regparm 属性会传递一个数值给编译器,这个数值会告诉编译器要用多少个寄存器来传递函数参数(EAX, EDX 或 ECX,最多 3 个寄存器),通常情况下函数是用堆栈来传递参数的. ...
- 在Ubuntu下安装deb包需要使用dpkg命令
Dpkg 的普通用法: 1.sudo dpkg -i <package.deb> 安装一个 Debian 软件包,如你手动下载的文件. 2.sudo dpkg -c <package ...
- Redis哨兵机制(sentinel)
1.简介: 1.是什么: Redis-Sentinel是Redis官方推荐的高可用(HA)方案,当用Reids 做master-slave高可用方案时,假如master宕机了,redis本身(包括它的 ...
- Javascript权威指南——读书笔记
一.JavaScript核心语法 1.字符串中接受RegExp参数的方法 (1)text.search(pattern)返回首次匹配成功的位置 (2)text.match(pattern)返回匹配组成 ...
- 【Luogu】【关卡2-11】简单数学问题(2017年10月)【还差三道题】
火星人 麦森数 P1403 [AHOI2005]约数研究 f(n)表示n的约数个数,现在给出n,要求求出f(1)到f(n)的总和. 解答:有几个1做约数的个数 = n /1; 有几个2做约数的个数 = ...
- C++中的delete加深认识
delete操作: 我们在删除一个指针之后,编译器只会释放该指针所指向的内存空间,而不会删除这个指针本身. 1.假如你不去释放,那么该区域的内存始终不能被其他数据所使用.2.指向该内存的指针是个局部变 ...
- nginx进行获取阿里云slb真实ip配置操作
环境: 1.使用阿里云的slb进行配置nginx,nginx无法获取用户的真实ip解决方案 参考阿里云: https://help.aliyun.com/knowledge_detail/40535. ...
- Java中使用try-catch-finally处理IO流中的异常
我们使用try-catch-finally来接收IO流的异常 finally是最后执行的步骤,非常适合最后存放close来关闭IO流,而且编程中我们不可以随意抛出异常,必须对异常进行处理. 从try- ...
- MySQL - primary key PK unique key,key PK index
primary key PK unique key 总结 primary key = unique + not null 主键不能为空每个字段值都不重复,unique可以为空,非空字段不重复 uniq ...