zoukankan      html  css  js  c++  java
  • 被打脸的潇洒哥(推递推式)

    链接:https://ac.nowcoder.com/acm/contest/318/M
    来源:牛客网
     

    在一次青青草原ACM个人赛中,潇洒哥被喜洋洋以30s罚时压制,委屈的当了个第二。潇洒哥蹲在角落说出了他的口头禅,并画起了圈圈。
         突然,他想出了一个有趣的题目,跑去给喜洋洋做。喜洋洋看到题目后懵逼了,但是看到潇洒哥脸上欠揍的笑容就不爽,暗想一定要做出来狠狠的打潇洒哥的脸。
        于是,他以上厕所为名义跑出来用手机把题目发给了你,希望你能帮你做出来让他可以嘲讽潇洒哥。
        你收到的题目如下:

            平面上有n个圆,求使这n个圆两两相交(即每两个圆之间恰好有两个交点)后最多能把平面划分成多少个区域。

    输入描述:

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

    输出描述:

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

    示例1

    输入

    复制

    3
    1
    2
    3

    输出

    复制

    2
    4
    8

    说明

    第一个样例,平面只有一个圆,此时将平面划分成圆内和圆外两个区域;
    

    第二个样例,平面上有两个圆,两圆相交可以将平面划分成四个区域(见下图)。

     题解:我是根据交点来推的,1个圆为0个交点,2个圆为2个交点,3个圆为6个。。。。。然后就可以推出来每次在原来的基础上多了(n-1)*2个交点,也就是多了这么多的交点,这个题的坑点在于0,一开始的提交没考虑到0个圆,第二次想错了,以为0个的时候平面是0,其他基本很简单

    代码:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    
    using namespace std;
    
    int main()
    {
    	
    	long long int sum[1005]={0};
    	sum[0]=1;
    	sum[1]=2;
    	for(int t=2;t<=1000;t++)
    	{
    		sum[t]=sum[t-1]+(t-1)*2;
    	}
    	int T;
    	cin>>T;
    	//int a[105];
    	for(int t=0;t<T;t++)
    	{
    		int n;
    		scanf("%d",&n);
    		printf("%lld
    ",sum[n]);
    		
    	}
    	
    	return 0;
    }
  • 相关阅读:
    [2012山东ACM省赛] Fruit Ninja II (三重积分,椭球体积)
    [2012山东ACM省赛] The Best Seat in ACM Contest (模拟)
    [2012山东ACM省赛] n a^o7 !(模拟,字符替换)
    [ACM] Hrbustoj 1376 能量项链 (区间动态规划)
    红黑树 c++ 实现
    八大排序算法
    git 常用命令
    linux 学习笔记 day1
    挑战:数据提取 — 实验楼
    挑战:历史命令 — 实验楼
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10781870.html
Copyright © 2011-2022 走看看