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 ...
随机推荐
- netty的原理
1. Netty简介 Netty是一个高性能.异步事件驱动的NIO框架,基于JAVA NIO提供的API实现.它提供了对TCP.UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作 ...
- tonight i need your body
wdnmd wdnmd 再lable中我们有几个不同的type参数: text 写的是文本类型的参数 password 不管输入的是什么显示的都是星星 date 输入的是一个日历本 ...
- __attribute__((regparm(3))) from GNU C
在 x86 上,regparm 属性会传递一个数值给编译器,这个数值会告诉编译器要用多少个寄存器来传递函数参数(EAX, EDX 或 ECX,最多 3 个寄存器),通常情况下函数是用堆栈来传递参数的. ...
- CentOS7 部署单节点 FastDFS
准备 环境 系统:CentOS7.5 软件即依赖 libfatscommon FastDFS分离出的一些公用函数包 FastDFS fastdfs-nginx-module FastDFS和nginx ...
- Redis 管道(pipeline)
- svnadmin - Subversion 仓库管理工具
SYNOPSIS 总览 svnadmin command /path/to/repos [options] [args] OVERVIEW 概述 Subversion 是一个版本控制系统,允许保存旧版 ...
- Ubuntu 14.04 Sublime Text3 Java编译运行(最简单的方法)
Sublime,结果发现只能编译,无法直接运行,于是就在网上搜解决方法,发现大部分方法都是告诉你要进入Java.sublime-packag这个文件,然后再修改JavaC.sublime-build, ...
- SVN版本管理与大型代码上线方案(一)
SVN版本管理与大型代码上线方案(一) 链接:https://pan.baidu.com/s/1A3Iq3gGkGS27L_Gt37_I0g 提取码:ncy2 复制这段内容后打开百度网盘手机App,操 ...
- CodeForces - 337D 树形dp
题意:一颗树上有且仅有一只恶魔,恶魔会污染距离它小于等于d的点,现在已经知道被污染的m个点,问恶魔在的可能结点的数量. 容易想到,要是一个点到(距离最远的两个点)的距离都小于等于d,那么这个点就有可能 ...
- 高德地图的权限Activity代码
/** * */package com.amap.location.demo; import java.lang.reflect.Method;import java.util.ArrayList;i ...