列表

详情


NC205059. 失忆药水

描述

牛牛有n-1个朋友,现在n个人中(包括牛牛自己),每个人都知道其他n-1个朋友的一个秘密(我们并不关注这些秘密到底是什么),但是现在牛牛和他的朋友们都不想任意k个人相互知道秘密(其中k是大于等于3的奇数) 。(比如a知道b的秘密,b知道c的秘密,c知道a的秘密,这就形成了3个人相互知道秘密这是不允许的。如果a知道b的秘密,b知道c的秘密,c知道d的秘密,d知道a的秘密,这是允许的)。所以他们就拜托万能的小黑制造了失忆药水。但是这种药水的制造成本非常高,小黑想知道最少需要制造几瓶,就可以满足牛牛和他朋友们的需求。
注:失忆药水是平等的,如果让a忘记了b的秘密,b也会忘记a的秘密


输入描述

多组输入,每组输入一个n,表示牛牛有n-1个朋友。(3≤n≤105)

输出描述

每组输出最少需要多少瓶失忆药水.

示例1

输入:

3
4

输出:

1
2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3(3.5.2) 解法, 执行用时: 440ms, 内存消耗: 4932K, 提交时间: 2020-07-16 20:03:57

def core(a):
    n=a
    return a*(a-1)//2-n//2*(n-n//2)
try:
    while 1:
        print(core(int(input())))
except EOFError:
    pass
        

C++14(g++5.4) 解法, 执行用时: 184ms, 内存消耗: 1992K, 提交时间: 2020-06-22 11:13:43

#include<bits/stdc++.h>
using namespace std;
int main(){
   long long  n;
    while(cin>>n){
      cout<<n*(n-1)/2-n*n/4<<'\n';  
    }
}

C 解法, 执行用时: 86ms, 内存消耗: 1272K, 提交时间: 2021-05-27 21:44:15

#include<stdio.h>
int main()
{
	double n;
	while(scanf("%lf",&n)!=EOF)
	printf("%.0lf\n",(n/4)*(n/2-1)+(n-n/2)/2*(n-n/2-1));
 } 

C++11(clang++ 3.9) 解法, 执行用时: 33ms, 内存消耗: 1352K, 提交时间: 2020-06-21 15:30:12

#include<stdio.h>
 
int main()
{
    long long n;
    while(~scanf("%lld",&n))printf("%lld\n",(n*n-2*n+n%2)/4);
}

上一题