折线分割平面hdu2050

来源:互联网 发布:sql查询前10条记录 编辑:程序博客网 时间:2024/05/16 17:44

折线分割平面
对于一条折线我们可以清楚的发现有两个面,如果我们现在在加一条直线,那么可以很清晰的看到了我们多增加3个平面,那么如果我们再增加折线的另一部分发现又增加了两个面,所以我们可以得到了5个面,当且仅当i=2的时候,瞎推理了下,发现每增加一条边上是当前是第i个折线的2倍-1,继续增加下一条发现是2倍-2所以我们得到递推式,
a[i] = a[i-1] + 2 * i -1 +2*i-2。

附上ac代码

#include<bits/stdc++.h>using namespace std;typedef long long LL;const int maxn =100000+ 10;int a[maxn];int t;void solve(){    a[1] =2;    for(int i = 2;i<=10010;i++)    {        a[i] = a[i-1] + 2*i-1 + 2*i-2;    }    scanf("%d",&t);    while(t--)    {        int n;        scanf("%d",&n);        printf("%d\n",a[n]);    }}int main(){    solve();    return 0;}
import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.StringTokenizer;import java.util.concurrent.LinkedBlockingDeque;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.HashSet;import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;import java.util.Stack;import java.lang.Math;public class Main{    Scanner cin = new Scanner(new BufferedInputStream(System.in));    int t;    int[] a = new int[10010 + 10];    int n;    void solve()    {        t = cin.nextInt();        a[1] = 2;        for(int i=2;i<=10010;i++)        {            a[i] = a[i-1] + 2 * i -1 + 2 * i - 2;        }        while(t!=0)        {            t--;            n = cin.nextInt();            System.out.println(a[n]);        }    }    public static void main(String[] args)    {        new Main().solve();    }}
0 0
原创粉丝点击