zoukankan      html  css  js  c++  java
  • BZOJ 1004: [HNOI2008]Cards(群论)

    好吧我就是蒟蒻根本没听说过群论虽说听叉姐说几万年都不会考

    我也讲不太来,直接戳VFK大神的blog啦 = = http://vfleaking.blog.163.com/blog/static/17480763420119685112649/

     然后在加上2001年的论文Pólya原理及其应用 应该能做了吧= =

    反正数论题就是各种小心

    CODE:

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    #define maxn 10000
    struct bigint{
     int len,a[maxn];
     int init(int x){memset(a,0,sizeof(a));a[len=1]=x;}
     int print(){
      for (int i=len;i>=1;i--) printf("%d",a[i]);
      return 0;
     }
    }f[103];
    bigint operator + (const bigint &x,bigint &y) {
     bigint ans;
     ans.init(0);
     ans.len=max(x.len,y.len);
     for (int i=1;i<=ans.len;i++) {
      ans.a[i]=x.a[i]+y.a[i]+ans.a[i-1]/10;
      ans.a[i-1]%=10;
     }
     if (ans.a[ans.len]/10) {
      ans.a[++ans.len]=1;
      ans.a[ans.len-1]%=10;
     }
     return ans;
    }
    bigint operator - (const bigint &x,bigint &y) {
     bigint ans;
     ans.init(0);
     ans.len=max(x.len,y.len);
     for (int i=1;i<=ans.len;i++) {
      ans.a[i]=x.a[i]-y.a[i];
      if (ans.a[i-1]<0) {ans.a[i-1]+=10;ans.a[i]--;}
     }
     while (!ans.a[ans.len]) ans.len--;
     return ans;
    }
    bigint operator * (const bigint &x,int y){
     bigint ans;
     ans.init(0);
     ans.len=x.len;
     for (int i=1;i<=ans.len;i++) {
      ans.a[i]=x.a[i]*y +ans.a[i-1]/10;
      ans.a[i-1]%=10;
     }
     if (ans.a[ans.len]/10) {
      ans.a[ans.len+1]=ans.a[ans.len]/10;
      ans.a[ans.len++]%=10;
     }
     return ans;
    }
    int main(){
     int n;
     scanf("%d",&n);
     f[1].init(1);f[2].init(5);
     f[0].init(2);
     for (int i=3;i<=n;i++) f[i]=f[i-1]*3-f[i-2]+f[0];
     f[n].print();
     return 0;
    }

  • 相关阅读:
    数列大小比较
    C的输入&输出
    PHP常用函数大全
    选择成就不一样的周末
    美图上市,跟我有关系?
    专心跑步
    越走窄的道路,谁能带我飞
    赶上了双12的末班车
    难道只要期待
    未达到的大梁、二梁,有希望便不会累
  • 原文地址:https://www.cnblogs.com/New-Godess/p/4348936.html
Copyright © 2011-2022 走看看