UVA 10079 - Pizza Cutting

Time Limited: 8.333 Seconds

When someone calls Ivan lazy, he claimsthat it is his intelligence that helps him to be so. If his intelligence allowshim to do something at less physical effort, why should he exert more? He alsoclaims that he always uses his brain and tries to do some work at less effort;this is not his laziness, rather this is his intellectual smartness.

Once Ivan was asked to cut a pizza intoseven pieces to distribute it among his friends. (Size of the pieces may not bethe same. In fact, his piece will be larger than the others.) He thought a bit,and came to the conclusion that he can cut it into seven pieces by only threestraight cuts through the pizza with a pizza knife. Accordingly, he cut thepizza in the following way (guess which one is Ivan's piece):One of hisfriends, who never believed in Ivans smartness, wasstartled at this intelligence. He thought, if Ivan can do it, why cant mycomputer? So he tried to do a similar (but not exactly as Ivan's, for Ivan willcriticize him for stealing his idea) job with his computer. He wrote a programthat took the number of straight cuts one makes through the pizza, and output anumber representing the maximum number of pizza pieces it will produce. Yourjob here is to write a similar program. It is ensured that Ivans friend wont criticizeyou for doing the same job he did.

Input

The input file will contain a singleinteger N (0 <= N <= 210000000) in each line representing the number ofstraight line cuts one makes through the pizza. A negative number terminates theinput.

Output

Output the maximum number of pizza piecesthe given number of cuts can produce. Each line should contain only one outputinteger without any leading or trailing space.

 

Sample Input:

5

10

-100

 

Sample Output:

16

56

 

题意:一块披萨切n刀,问最多能够切多少块!

 

思路:前n项和公式,以下是我的推理过程:

首先,题目关注的是一块馅饼能够切成几块,不是面积均分,也不涉及周长,所以只考虑块数即可,那么也就是说,这个馅饼多大根本无所谓,是什么形状也无所谓,只要能分成不同的块即可,那么我们就把他看成一个平面。

然后在平面内画一条线,能把该平面分成1+1

在平面内画两条线,两条线最多有1个交点,能把该平面分成1+1+2

在平面内画三条线,三条线最多有3个交点,能把该平面分成1+1+2+3

……

这样分下去,每增加一条线,交点就会增加n-1个,就会增加n

所以a[n]=a[n-1]+1;注意的是a[0]=1,那么s[n]=1+n*(n+1)/2;

 code:

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

typedef unsigned long long ull;
typedef long long ll;

ull cal(ll n)   //实际上long long 已经够用
{
    if (n%2) return (n+1)/2*n+1;
    else return n/2*(n+1)+1;
}

int main()
{
    ll n;
    while (~scanf("%lld",&n))
    {
        if (n<0) break;
        //else if (n==0) cout<<0<<endl;
        else cout<<cal(n)<<endl;
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值