列表

详情


NC21729. 被打脸的潇洒哥

描述

    “画个圈圈诅咒你!”
     在一次青青草原ACM个人赛中,潇洒哥被喜洋洋以30s罚时压制,委屈的当了个第二。潇洒哥蹲在角落说出了他的口头禅,并画起了圈圈。
     突然,他想出了一个有趣的题目,跑去给喜洋洋做。喜洋洋看到题目后懵逼了,但是看到潇洒哥脸上欠揍的笑容就不爽,暗想一定要做出来狠狠的打潇洒哥的脸。
    于是,他以上厕所为名义跑出来用手机把题目发给了你,希望你能帮你做出来让他可以嘲讽潇洒哥。
    你收到的题目如下:
        平面上有n个圆,求使这n个圆两两相交(即每两个圆之间恰好有两个交点)后最多能把平面划分成多少个区域。

输入描述

一个正整数t,表示有t()组数据。
接下来t行,每行一个整数n(),代表平面内圆的个数。

输出描述

输出共t行。每行一个正整数,表示对应的n个圆将该平面划分成的最大的区域数。

示例1

输入:

3
1
2
3

输出:

2
4
8

说明:

第一个样例,平面只有一个圆,此时将平面划分成圆内和圆外两个区域;
第二个样例,平面上有两个圆,两圆相交可以将平面划分成四个区域(见下图)。

原站题解

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

C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 488K, 提交时间: 2018-12-23 13:29:21

#include <bits/stdc++.h>
using namespace std;
int main() {
	int T; cin>>T;
	while(T--) {
		int n; cin>>n;
		if(n==0) cout<<1<<endl;
		else cout<<n*n-n+2<<endl;
	}
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 480K, 提交时间: 2018-12-23 12:32:12

#include<stdio.h>
int main()
{
	int T,n;scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		if(!n)printf("1\n");
		else printf("%d\n",2+n*(n-1));
	}
	return 0;
}

Python3(3.5.2) 解法, 执行用时: 27ms, 内存消耗: 3428K, 提交时间: 2018-12-23 13:02:59

T = int(input())
for t in range(T):
    n = int(input())
    print(n*n-n+2 if n else 1)

上一题