zoukankan      html  css  js  c++  java
  • poj1812

    C++ TLE,G++可以过。
    Problem : 1812 ( Count the Tetris )     Judge Status : Accepted
    RunId : 2899931    Language : G++    Author : huwenbiao
    Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
    /***************************************************************\
    *Author:Hu Wenbiao
    *Created Time: Tue 31 Aug 2010 04:03:31 PM CST
    *File Name: main.cpp
    *Description:polya原理。大数乘法直接循环乘的,不知道反复平方法
    *会不会快些
    \***************************************************************/

    //*========================*Head File*========================*\\

    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    /*----------------------*Global Variable*----------------------*/

    int
    A[
    3000],B[3000];
    int
    N,C;

    //*=======================*Main Program*=======================*//
    using namespace std;

    void
    mul(int* A,int c,int m){
    //A*=c^m
    while(m--){
    for
    (int i=
    1;i<=A[0];i++){
    A[i]*=c;
    }

    for
    (int i=
    1;i<=A[0];i++){
    if
    (A[i]>
    9999){
    A[i+
    1]+=A[i]/10000;
    A[i]%=
    10000;
    }
    }

    if
    (A[A[
    0]+1])
    A[
    0]++;
    }
    }

    void
    add(int *B,int *A,int m){
    //B+=A*m
    B[0]=max(A[0],B[0]);
    for
    (int i=
    1;i<=A[0];i++){
    B[i]+=A[i]*m;
    if
    (B[i]>
    9999){
    B[i+
    1]+=B[i]/10000;
    B[i]%=
    10000;
    }
    }

    if
    (B[B[
    0]+1])
    B[
    0]++;
    }

    void
    div(int*A,int*B){
    //A=B/8
    A[0]=B[0];
    for
    (int i=B[
    0];i;i--){
    A[i]=B[i]/
    8;
    B[i-
    1]+=(B[i]%8)*10000;
    }

    if
    (A[A[
    0]]==0)
    A[
    0]--;
    }

    void
    polya(int c,int n){
    //polya主函数
    memset(A,0,sizeof(A));
    memset(B,
    0,sizeof(B));
    A[
    0]=1;A[1]=1;
    //旋转置换
    if(n&1){//odd
    mul(A,c,n*n/4+1);
    add(B,A,
    2);
    mul(A,c,n*n/
    4);
    add(B,A,
    1);
    mul(A,c,n*n/
    2);
    add(B,A,
    1);
    }

    else
    {
    //even
    mul(A,c,n*n/4);
    add(B,A,
    2);
    mul(A,c,n*n/
    4);
    add(B,A,
    1);
    mul(A,c,n*n/
    2);
    add(B,A,
    1);
    }

    //翻转置换
    memset(A,0,sizeof(A));
    A[
    0]=A[1]=1;
    if
    (n&
    1){//odd
    mul(A,c,(n*n-n)/2+n);
    add(B,A,
    4);
    }

    else
    {
    //even
    mul(A,c,(n*n-n)/2+n);
    add(B,A,
    2);
    memset(A,
    0,sizeof(A));
    A[
    0]=A[1]=1;
    mul(A,c,n*n/
    2);
    add(B,A,
    2);
    }

    div(A,B);
    }

    int
    main(){

    //freopen("input","r",stdin);
    while(scanf("%d%d",&N,&C)!=EOF){
    if
    (N==
    1){
    printf(
    "%d\n",C);
    continue
    ;
    }

    polya(C,N);
    printf(
    "%d",A[A[0]]);
    A[
    0]--;
    while
    (A[
    0]){
    printf(
    "%.4d",A[A[0]]);
    A[
    0]--;
    }

    printf(
    "\n");
    }
    }

  • 相关阅读:
    将本地sql文件导入到mysql中
    eclipse注释乱码问题
    导入import com.sun.image.codec.jpeg.JPEGCodec出错
    cmd启动和停止tomcat
    Tomcat修改端口
    ==和equals
    多态
    关键字——this,super,static,final
    方法重载、方法重写、四种权限修饰、JavaBean、代码块
    异常
  • 原文地址:https://www.cnblogs.com/Open_Source/p/1904879.html
Copyright © 2011-2022 走看看