CodeForces 23B Party (简单题)
来源:互联网 发布:ug编程侧铣头走圆弧 编辑:程序博客网 时间:2024/05/16 23:50
题目类型 想法题
题目意思
现在派对中有 n 个人 (1 <= n <= 1e5), 人与人之间可能存在朋友关系 (这个关系是要你选定的)
刚开始的时候 没有朋友的人离场
下一时刻 如果某个人在剩下的人中有 1 个朋友, 那么这个人就要离场, 即所有在剩下的人中拥有 1 个朋友的人都要离场
再下一时刻 在剩下有人中拥有 2 个朋友的人离场 直到没有人离场为止, 问要怎么安排人与人之间的朋友关系才能使最后剩下的人尽量多
只需输出最后最多能剩下多少人
解题方法
首先 每个人与其他的人都是朋友关系 即每个人拥有 n - 1 个朋友 , 这时我们令 1 和 n 不是朋友 , 那么在 n 个人中
只有 1 和 n 是拥有 n - 2个朋友的, 他们在 n - 2 时刻就要离场了这时剩下的 n - 2个人中所有人都是拥有 n - 3个朋友, 而 n - 3时刻
已经过去 所以剩下的人都可以留下
注意当 n == 1时答案是 0 其他情况答案都是 n - 2
附加解释 :
首先派对至少会有一个人离场 因为总有一个朋友数最少的人会在某时刻第一个离场
假设这个人有 d 个朋友, 那么我们可以推理下看是否能剩下n-1个人
既然第一个走的人有 d 个朋友, 那么其他人至少有 d+1 个朋友(这样才可能是第一个人先走)
现在要求 第一个人走后剩下的人的朋友数要 <= d 才可能会出现最后剩下n-1个人的情况(下一时刻就是d+1时刻了)
那么就意味着第一个人与其他人都是朋友(这样第一个人走后其他人的朋友数都可以从 d+1变成 d,只有这样才可能满足条件)
这样的话第一个人就有 n-1个朋友了(因为除了第1个人其余的人数为n-1),那么就意味着刚开始其他人至少要有 d+1=n个朋友
(显然是不可能的,因为某个人的朋友数最多才是n-1) 所以我们可以发现 最后剩下 n-1个人是不可行的
那么我们可以考虑剩下n-2个人可不可以呢? 刚才推理剩下n-1个人不行的原因是 第一个离场的人任务太重了
(任务太重的意思是其他人最后不用离场都要他的配合)
那么可以考虑再加一个人来配合他, 例如刚开始时所有人都是相互的朋友, 只有1和n不是朋友, 那么朋友数最少显然是1和n
而且当1和n同时走了以后其他人的朋友数就降为n-3了(原来是n-1,剩下的人各少了两个朋友1和n)
n-3时刻已经过去了所以剩下的人都不用离场
参考代码 - 有疑问的地方在下方留言 看到会尽快回复的
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <set>#include <map>#include <string>#include <algorithm>using namespace std;typedef long long LL;const int MAXN = 1e2 + 10;int main() { int t; scanf("%d", &t); while(t--) { int n; scanf("%d", &n); if(n == 1) printf("0\n"); else printf("%d\n", n-2); } return 0;}
0 0
- CodeForces 23B Party (简单题)
- CodeForces 23B Party
- CodeForces 23B-Party
- CodeForces 23B Party (思维题)
- B. Party – Codeforces Beta Round #23
- codeforces 549B B. Looksery Party(构造)
- Codeforces 549B Looksery Party [贪心]
- CodeForces 20B Equation (简单题)
- CodeForces 21B Intersection (简单题)
- CodeForces 22B Bargaining Table (简单题)
- CodeForces 24B F1 Champions (简单题)
- codeforces 735 B.Urbanization (简单题)
- B. Party
- B. Party
- CodeForces Gym 100646D Party Party Party
- [codeforces] B. Parade 简单暴力
- Codeforces 842B 简单几何
- codeforces 359B B. Permutation(简单构造)
- 有向图邻接表表示及反向图构造(第五周作业)
- u-boot-2009.08在2440上的移植详解(四)
- 移动开发学习地址
- 分类的IP地址(五)
- u-boot-2009.08在2440上的移植详解(五)
- CodeForces 23B Party (简单题)
- 详解MFC使用ADO连接SQLServer数据库
- 第六周作业1——利用哈夫曼编码英文字母表
- set内存管理
- 关于回调函数的理解
- Struts2中访问web元素的四种方式
- web开发学习地址
- android中的Dalvik
- mysql数据库索引