2014 网选 上海赛区 hdu 5047 Sawtooth

题意:求n个'M'型的折线将一个平面分成的最多的面数!
思路:我们都知道n条直线将一个平面分成的最多平面数是 An = An-1 + n+1
也就是f(n) = (n*n + n +2)/2
对于一个'M'型的折线呢?它有四条线,但是由于三个顶点的关系导致划分的平面
的数目减少了9个!所以有递推公式 f(n) = (m*m + m + 2)/2 - 9*n; m = 4*n

最后 f(n) = (8*n+1)*(n-1)+2)

由于 n<=1e12 , 所以回报 long long!那么对于大于1e9的数我做了大数乘法的处理!

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

void fun(int a[], long long b, int &l){//将一个数进行拆分放到数组中!
    while(b){
        a[l++] = b%10;
        b/=10;
    }
}

int a[30], b[30], c[30];
int la, lb;

void cal(){
    memset(c, 0, sizeof(c));
    for(int i=0; i<la; ++i)
        for(int j=0; j<lb; ++j)
            c[i+j] += a[i]*b[j];
    int k=0;
    int len = la+lb-1;
    for(int i=0; i<len; ++i){
        c[i]+=k;
        k = c[i]/10;
        c[i]%=10;
    }
    if(k>0) c[len++] = k;
    k = 2;
    for(int i=0; i<len; ++i){
        c[i]+=k;
        k = c[i]/10;
        c[i]%=10;
    }
    if(k>0) c[len++] = k;

    for(int i = len-1; i>=0; --i)
        printf("%d", c[i]);
    printf("\n");
}

int main(){
    long long n;
    int t, cnt=0;
    scanf("%d", &t);
    while(t--){
        scanf("%I64d", &n);
        printf("Case #%d: ", ++cnt);
        if(n <= 1e9)
            printf("%I64d\n", (8*n+1)*(n-1)+2);
        else{
            long long x = 8*n+1;
            long long y = n-1;
            la=lb=0;
            fun(a, x, la);
            fun(b, y, lb);
            cal();
        }
     }
    return 0;
}
时间: 2024-10-28 10:33:22

2014 网选 上海赛区 hdu 5047 Sawtooth的相关文章

2014 网选 广州赛区 hdu 5025 Saving Tang Monk(bfs+四维数组记录状态)

/* 这是我做过的一道新类型的搜索题!从来没想过用四维数组记录状态! 以前做过的都是用二维的!自己的四维还是太狭隘了..... 题意:悟空救师傅 ! 在救师父之前要先把所有的钥匙找到! 每种钥匙有 k 种, 每一种有多个! 只要求找到每一种的其中一个就可以! 找钥匙的顺序按照 第1种, 第2种, 第3种 ....第k种! 找钥匙的时间是一步, 走到相邻空地的时间是一步, 打蛇的时间就是两步! 求找到师傅的最少步数! 这里说一下 state[N][N][10][35]表示的含义: ->state[

2014 网选 广州赛区 hdu 5023 A Corrupt Mayor&#039;s Performance Art

#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define N 1000005 using namespace std; int c[35]; int tree[N*4];//正值表示该节点所管理的区间的颜色是纯色,-1表示的是非纯色 int n, m; void buildT(int ld, int rd, int p){ if(ld <= rd)

2014 网选 5024 Wang Xifeng&#039;s Little Plot

题意:从任意一个任意一个可走的点开始找一个最长的路,这条路如果有转弯的话,那么必须是 90度,或者没有转弯! 思路: 首先用dfs将所有可走点开始的 8 个方向上的线段的最长长度求出来 !step[i][j][k] 表示的是(i,j)沿着k方向一直走到头或者转弯时的最长步数!最后枚举每一个可走点转弯为90度的路径,找到最长的长度! step[i][j][k1] + step[i][j][k2] 就是 (i, j)这个点 k1 和 k2方向构成90度! #include<iostream> #i

2014 网选 5014 Number Sequence(异或)

/* 题意:a, b两个序列,规定由[0, n]区间的数! 求 a[i] ^ b[i] 的和最大! 思路:如果数字 n的二进制有x位, 那么一定存在一个数字m,使得n^m的所有二进制位 都是1,也就是由x位1!这样下去的到的值就是最大值! */ #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define N 100005 using namespace s

2014 网选 5011 Game(Nim游戏,数学题)

/* 题意:Nim游戏! 思路:通过异或,判断将n个数表示成二进制的形式之后,是否对应位的数字1 的个数是偶数! */ #include<iostream> using namespace std; int main(){ int n, x, s; while(cin>>n){ s=0; while(n--){ cin>>x; s^=x; } if(s) cout<<"Win";//不是偶数 else cout<<"

2014 网选 5012 Dice(bfs模板)

/* 题意:就是给定两个筛子,每个筛子上6个面,每个面的数字属于[1,6], 且互不相同! 问a筛子最少经过按照题目规定的要求转动,达到和b筛子上下左右前后的数字相同! 思路:很直白的bfs,将每一种状态对应一个数字,保证这种状态不会重新加入队列中! */ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using

2011ChinaJoyCosplay上海赛区欢乐谷最后角逐初露锋芒

晴空万里,仿佛Coser们的爱PK过了天气预报:原预告会下雨的上海,此刻是白云浮碧空.2011年ChinaJoy Cosplay上海赛区的最后一场预选赛就在今天,就在曾容纳上千名Coser全场欢呼共鸣的上海欢乐谷亚瑟宫. 陆续进园的华丽Coser们曾一度成了行人围观的明星众,闪光灯阵列与要求合影的孩童们一起组成了一条封锁线:对于全华东爱好动漫文化的朋友来说,一年一度最特殊的节日将从今日开始. 带给我们无数感动的ChinaJoy Cosplay赛事已伴随我们度过了7个年头,我们在这里洒下了千百日排

2011ChinaJoyCosplay嘉年华上海赛区最后角逐开赛首日高手过招

2011年5月1日上海欢乐谷亚瑟宫,2011年ChinaJoy Cosplay嘉年华上海赛区的最后角逐第一天.十几个实力派社团.数百分钟的精彩绝伦的舞台pk.数千下快门以及无数掌声和喝彩欢呼交织成了一幅极为华丽的图案. 狂歌魔艳的<霹雳布袋戏之火宅佛狱-前传>开场即引爆了全馆气氛,不输原著的精妙道具与极高的协作度献上了今天第一场高水的.高成熟度的演出. <霹雳布袋戏之火宅佛狱-前传>社团:狂歌魔艳 拷瓦排儿Cosplay团,以黑塔利亚为蓝本制作的<we are the wor

网游“上海帮”的决胜之道:行业细分形成产业链

中国出版工作者协会游戏出版物工作委员会(GBC)与国际数据公司(IDC)联合公布的<2008 年中国游戏产业调查报告>显示:截至2008年10月,中国网游研发公司数量已达131家,比2007年增长4%.上海网游研发公司达28家,比2007 年增长27%,占全国规模的1/5强. 业内人士称,优越的整体商务环境赋予年轻人创业的激情.从跨国巨头到国内大鳄,都早已纷纷在上海落户,上海的总部经济效应开始显露,而网游所需要的硬件设施都可以直接在他们中间找到良好的合作伙伴. 人才聚集和资金的聚集效应是网游企