Codeforces #380 div2 E(729E) Subordinates
1 second
256 megabytes
standard input
standard output
There are n workers in a company, each of them has a unique id from 1 to n. Exaclty one of them is a chief, his id is s. Each worker except the chief has exactly one immediate superior.
There was a request to each of the workers to tell how how many superiors (not only immediate). Worker's superiors are his immediate superior, the immediate superior of the his immediate superior, and so on. For example, if there are three workers in the company, from which the first is the chief, the second worker's immediate superior is the first, the third worker's immediate superior is the second, then the third worker has two superiors, one of them is immediate and one not immediate. The chief is a superior to all the workers except himself.
Some of the workers were in a hurry and made a mistake. You are to find the minimum number of workers that could make a mistake.
The first line contains two positive integers n and s (1 ≤ n ≤ 2·105, 1 ≤ s ≤ n) — the number of workers and the id of the chief.
The second line contains n integers a1, a2, ..., an (0 ≤ ai ≤ n - 1), where ai is the number of superiors (not only immediate) the worker with id i reported about.
Print the minimum number of workers that could make a mistake.
3 2
2 0 2
1
5 3
1 0 0 4 1
2
In the first example it is possible that only the first worker made a mistake. Then:
- the immediate superior of the first worker is the second worker,
- the immediate superior of the third worker is the first worker,
- the second worker is the chief.
- 题意:有n个人,其中一个是大boss,他没有上司,剩下每个人都有一个顶头上司,现在让每个人回答自己有几个上司,问至少有几个人说错了?
- 思路:因为每个人都有顶头上司,所以上司的个数必然是连续的,也就是说,如果有一个人有3个上司,那么必然有人有2个上司,有人有1个上司。
- 当然,不是大boss的人不能有0个上司,大boss必然只有0个上司,如果不满足这两点那么ans都要++,并且将前者纳入叫错但还未纠正的人(记为j个)
- 搜索一遍,记录vis[i]表示有i上司的人有几个。再从i=1开始遍历,sum(人数)初始值为1(1为那个大boss),如果vis[i]>0则往后遍历,记录sum(人数)+=vis[i],如果vis[i]==0,那么说明这个位置应该有人但是现在却没人,所以有人说错了,这个时候从之前的j个人里过来一个作为填补,所以j--,sum++,
- 一旦sum等于总人数,那么终止遍历,如果j==0之后,如果vis[i]==0 那么就说明后面有人说错了,所以sum++,ans++。
- 最后ans即为答案
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <cmath>
#include <queue>
#include <algorithm>
#define N 200005
#define inf 1e18+5
typedef long long ll;
#define rep(i,n) for(i=1;i<=n;i++)
using namespace std;
int i,j,k,m,n,t,cc,ans;
int a[N],vis[N];
int s;
int main()
{
while(scanf("%d%d",&n,&s)!=EOF){
memset(vis,,sizeof(vis));
ans=;
j=;
rep(i,n){
scanf("%d",&a[i]);
vis[a[i]]++;
if(i!=s&&a[i]==){
ans++;
j++;
}
if(i==s&&a[i]!=){
vis[a[i]]--;
ans++;
a[i]=;
vis[]++;
}
}
i=;
int sum=;
while(sum<n){
if(vis[i]){
if(sum+vis[i]<n) sum+=vis[i];
else break;
}
else{
if(j){
j--;
}
else {
ans++;
}
sum++; }
i++;
}
// if(a[1]==121&&a[2]==158) for(i=100;i<=200;i++) printf("%d ",a[i]); printf("%d\n",ans);
// printf("%d aaa",a[142]);
} return ;
}
- 最后ans即为答案
Codeforces #380 div2 E(729E) Subordinates的更多相关文章
- Codeforces Round #380 (Div. 2)/729E Subordinates 贪心
There are n workers in a company, each of them has a unique id from 1 to n. Exaclty one of them is a ...
- Codeforces #380 div2 D(729D) Sea Battle
D. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- Codeforces #380 div2 C(729C) Road to Cinema
C. Road to Cinema time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- Codeforces #380 div2 B(729B) Spotlights
B. Spotlights time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- Codeforces #180 div2 C Parity Game
// Codeforces #180 div2 C Parity Game // // 这个问题的意思被摄物体没有解释 // // 这个主题是如此的狠一点(对我来说,),不多说了这 // // 解决问 ...
- Codeforces #541 (Div2) - E. String Multiplication(动态规划)
Problem Codeforces #541 (Div2) - E. String Multiplication Time Limit: 2000 mSec Problem Descriptio ...
- Codeforces #541 (Div2) - F. Asya And Kittens(并查集+链表)
Problem Codeforces #541 (Div2) - F. Asya And Kittens Time Limit: 2000 mSec Problem Description Inp ...
- Codeforces #541 (Div2) - D. Gourmet choice(拓扑排序+并查集)
Problem Codeforces #541 (Div2) - D. Gourmet choice Time Limit: 2000 mSec Problem Description Input ...
- Codeforces #548 (Div2) - D.Steps to One(概率dp+数论)
Problem Codeforces #548 (Div2) - D.Steps to One Time Limit: 2000 mSec Problem Description Input Th ...
随机推荐
- 身份证校验,前台js校验,后台java校验
js校验: var vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"内 ...
- 干货 | Docker文件系统的分层与隔离
现在就开始今天的分享~ M老师:docker 的很多特性都表现在它所使用的文件系统上,比如大家都知道docker的文件系统是分层的,所以它可以快速迭代,可以回滚.这个回滚机制跟github很像,每次提 ...
- Android中webview和js之间的交互(转)
http://www.cnblogs.com/leizhenzi/archive/2011/06/29/2093636.html 1.android中利用webview调用网页上的js代码. Andr ...
- linux中用户、组的管理(密码管理、权限管理及其修改用户、组)(转)
process(进程) 1 计算资源 权限 用户(获取资源或服务的凭证或标识) 用户,容器,关联权限:用户组(标识符),方便地指派权限 2 用户.组.权限 安全上下文(secure context ...
- Appium移动自动化测试之问题总结
1.运行该测试用例,报如下错误 java.lang.NoSuchMethodError: org.openqa.selenium.remote.ErrorHandler.<init>(Lo ...
- 更新CocoaPods
终端输入 : sudo gem install -n /usr/local/bin cocoapods –pre 更新了CocoaPods后,在原来的工程中执行了pod install命令后,报这样的 ...
- Python:进程
由于GIL的存在,python一个进程同时只能执行一个线程.因此在python开发时,计算密集型的程序常用多进程,IO密集型的使用多线程 1.多进程创建: #创建方法1:将要执行的方法作为参数传给Pr ...
- 最简单的访问google的办法
我用的是猎豹浏览器,在工具下面的猎豹应用市场里面,搜索红杏,安装即可. 打开google产品地址时,如果地址栏里面右边的杏是绿色的,代表正常,如果是红色的,代表不正常. 可能是装了其他代理软件,如Sw ...
- git更换仓库地址
1. 从原始地址 clone 一份不包含 work copy的仓库: git clone --bare bitbucket_project_address 2. 在os china上创建同名项目. ...
- 1、Linux驱动重要的数据结构
1.struct file 这个结构体定义在 linuxsource/include/linux/fs.h 中第960行左右 具体成员如下: struct file { /* * fu_list b ...