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 ...
随机推荐
- cesium清除选定事件
cesium清除选定事件 此处的案例不一定适合你的项目,但可以给你一个思路.清除选定,就是还原你选中之前的状态.比如你点击一个面高亮,面的颜色发生改变:并且会弹出一个divPoint框.此时的清除选定 ...
- Git比较分支差异的3个命令
查看本地分支 git branch 查看远端分支,无论是否checkout到本地 git branch -r 假如想比较dev和master 命令1:比较文件 git diff dev master ...
- 防止重复提交 aspx.net
:服务器控制.后台生成一个token,存入session或者其他缓存里面.渲染表单时,给form一个隐藏的token(令牌).用户提交表单时:先判断表单里面的token是否存在,不存在拒绝接受此数据: ...
- 慎用margin系列2---ie6双倍边距问题
IE6下有一个著名的margin双倍bug 一.什么是双边距Bug? 先来看图: 我们要让绿色盒模型在蓝色盒模型之内向左浮动,并且距蓝色盒模型左侧100像素.这个例子很常见,比如在网页布局中,侧边栏靠 ...
- spring配置mybatis的sqlsessionfactory
<!--读入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.bean ...
- 常用命令--awk
awk '{ BEGIN{stat1} BEGIN{stat2} pattern1{action1} pattern2{action2} ... patternn{actionn} {默认动作,无条件 ...
- flex布局(弹性布局)
1. 传统布局与 flex 布局比较 传统布局 兼容性好 布局繁琐 局限性,不能在移动端很好的布局 flex 弹性布局 操作方便,布局极为简单,移动端应用很广泛 PC端浏览器支持较差 IE 11 或 ...
- testparm - 检查smb.conf配置文件的内部正确性
总览 testparm [-s] [-h] [-L servername] [configfilename] [hostname hostIP] 描述 此程序是samba套件的一部分. testpar ...
- css样式重叠、css样式继承、css 属性计算,,a元素下的文字颜色不能继承
1.属性的重叠 在渲染前浏览器将判断使用哪个样式 我们书写的样式会覆盖浏览器的自带样式 我们写的样式进行权重比较,规则如下 !import Infiniti无穷大 进制伪256行内样式 1000.id ...
- Goaccess的简单使用
goaccess了,它是一个日志分析工具,并不只是为nginx使用的,你也可以用它来分析apache,具有解析速度快,使用简单,能生成json,html,csv等特点. 1.goaccess的基本安装 ...