奇怪模板集合

传说中 \(O(n^{2.807})\) 的矩阵乘法模板

实测大数据会比 \(O(n^3)\) 的矩乘快一点,卡常卡不过可以拿来用,并且博主写的比较丑,所以如果优化一下写法大概能跑得更快。

Code
#include<bits/stdc++.h>
#define ri register int
using namespace std;
typedef long long ll;
typedef vector<int> poly;
typedef pair<int,int> pii;
typedef pair<ll,int> pli;
typedef pair<int,ll> pil;
typedef pair<ll,ll> pll;
#define fi first
#define se second
#define pb push_back
#define rez resize
const ll Inf=1e18;
const int rlen=1<<20;
char buf[rlen],*ib=buf,*ob=buf;
#define gc() (((ib==ob)&&(ob=(ib=buf)+fread(buf,1,rlen,stdin)),ib==ob)?-1:*ib++)
inline int read() {
  static int ans;
  static char ch;
  ans=0,ch=gc();
  while(!isdigit(ch)) ch=gc();
  while(isdigit(ch)) ans=(ans<<3)+(ans<<1)+(ch^48),ch=gc();
  return ans;
}
inline ll readl() {
  static ll ans;
  static char ch;
  ans=0,ch=gc();
  while(!isdigit(ch)) ch=gc();
  while(isdigit(ch)) ans=(ans<<3)+(ans<<1)+(ch^48),ch=gc();
  return ans;
}
namespace modular {
  const int mod=1e9+7;
  inline int add(int a,int b) { return a+b<mod?a+b:a+b-mod; }
  inline int dec(int a,int b) { return a<b?a-b+mod:a-b; }
  inline int mul(int a,int b) { return (ll)a*b%mod; }
  inline void Add(int&a,int b) { a=a+b<mod?a+b:a+b-mod; }
  inline void Dec(int&a,int b) { a=a<b?a-b+mod:a-b; }
  inline void Mul(int&a,int b) { a=(ll)a*b%mod; }
  inline int ksm(int a,int p) { int ret=1;for(;p;p>>=1,Mul(a,a)) (p&1)&&(Mul(ret,a),1);return ret; }
  inline int Inv(int a) { return ksm(a,mod-2); }
  inline int sqr(int a) { return (ll)a*a%mod; }
  inline int cub(int a) { return (ll)a*a%mod*a%mod; }
} using namespace modular;
template<typename T> inline void ckmax(T&a,T b) { a<b?a=b:0; }
template<typename T> inline void ckmin(T&a,T b) { a>b?a=b:0; }
struct mat {
  int a[512][512],l;
  mat(int _l=0) { l=_l;for(ri i=0;i<l;++i) for(ri j=0;j<l;++j) a[i][j]=0; }
  inline int*operator[](const int&k) { return a[k]; }
  inline mat operator*(mat b) {
    mat c(l);
    if(l<=64) {
      for(ri i=0;i<l;++i) for(ri k=0;k<l;++k) if(a[i][k])
      for(ri j=0;j<l;++j) Add(c[i][j],mul(a[i][k],b[k][j]));
    }
    else {
      l>>=1;
      mat aa(l),bb(l),m1(l),m2(l),m3(l),m4(l),m5(l),m6(l),m7(l);
      //m1=(a11+a22)*(b11+b22);
      for(ri i=0;i<l;++i) for(ri j=0;j<l;++j) {
        aa[i][j]=add(a[i][j],a[i+l][j+l]);
        bb[i][j]=add(b[i][j],b[i+l][j+l]);
      } m1=aa*bb;
      //m2=(a21+a22)*b11;
      for(ri i=0;i<l;++i) for(ri j=0;j<l;++j) {
        aa[i][j]=add(a[i+l][j],a[i+l][j+l]);
        bb[i][j]=b[i][j];
      } m2=aa*bb;
      //m3=a11*(b12-b22);
      for(ri i=0;i<l;++i) for(ri j=0;j<l;++j) {
        aa[i][j]=a[i][j];
        bb[i][j]=dec(b[i][j+l],b[i+l][j+l]);
      } m3=aa*bb;
      //m4=a22*(b21-b11);
      for(ri i=0;i<l;++i) for(ri j=0;j<l;++j) {
        aa[i][j]=a[i+l][j+l];
        bb[i][j]=dec(b[i+l][j],b[i][j]);
      } m4=aa*bb;
      //m5=(a11+a12)*b22;
      for(ri i=0;i<l;++i) for(ri j=0;j<l;++j) {
        aa[i][j]=add(a[i][j],a[i][j+l]);
        bb[i][j]=b[i+l][j+l];
      } m5=aa*bb;
      //m6=(a21-a11)*(b11+b12);
      for(ri i=0;i<l;++i) for(ri j=0;j<l;++j) {
        aa[i][j]=dec(a[i+l][j],a[i][j]);
        bb[i][j]=add(b[i][j],b[i][j+l]);
      } m6=aa*bb;
      //m7=(a12-a22)*(b21+b22);
      for(ri i=0;i<l;++i) for(ri j=0;j<l;++j) {
        aa[i][j]=dec(a[i][j+l],a[i+l][j+l]);
        bb[i][j]=add(b[i+l][j],b[i+l][j+l]);
      } m7=aa*bb;
      // c11=m1+m4-m5+m7
      // c12=m3+m5
      // c21=m2+m4
      // c22=m1-m2+m3+m6
      for(ri i=0;i<l;++i) for(ri j=0;j<l;++j) {
        if((c[i][j]=((ll)m1[i][j]+m4[i][j]-m5[i][j]+m7[i][j])%mod)<0) c[i][j]+=mod;
        c[i+l][j]=add(m2[i][j],m4[i][j]);
        c[i][j+l]=add(m3[i][j],m5[i][j]);
        if((c[i+l][j+l]=((ll)m1[i][j]-m2[i][j]+m3[i][j]+m6[i][j])%mod)<0) c[i+l][j+l]+=mod;
      }
      l<<=1;
    }
    return c;
  }
  inline void print() { for(ri i=0;i<l;++i,puts("")) for(ri j=0;j<l;++j) cout<<a[i][j]<<‘ ‘; }
};
int main() {
  mat a(512);
  for(ri i=0;i<512;++i) for(ri j=0;j<512;++j) a[i][j]=i*256+j;
  a=a*a;
  cout<<a[0][0];
  return 0;
}

原文地址:https://www.cnblogs.com/ldxcaicai/p/12701602.html

时间: 2025-01-18 05:44:19

奇怪模板集合的相关文章

模板集合——持续更新中

首先   sro_Cydiater_orz   sro_姬树流_orz 两位开搞模板集合已久的大神 1.对拍 1 @echo off 2 set path=C:\MinGWStudio\MinGW\bin 3 g++ -o makedata.exe makedata.cpp 4 g++ -o right.exe right.cpp 5 g++ -o test.exe test.cpp 6 set path=C:\Windows\system32 7 :loop 8 makedata.exe 9

字符串题模板集合

后缀数组 #include <iostream> #include <stdio.h> #include <stdlib.h> #include <algorithm> #include <string.h> #include <vector> #include <limits> #include <set> #include <map> using namespace std; #define S

国内大学毕业论文LaTeX模板集合

薛瑞尼的清华大学学位论文LaTeX模板http://sourceforge.net/projects/thuthesis/ 北大论文文档 LaTeX 模板 pkuthss v1.2 betahttp://bbs.pku.edu.cn/bbs/bbstcon.php?board=MathTools&threadid=11364449 刘本源的国防科学技术大学研究生学位论文LaTeX模板http://code.google.com/p/nudtpaper/ 南开大学学位论文LaTeX模板(孙文昌老师

17款免费的Bootstrap后台管理模板集合

Bootstrap是Twitter推出的一个用于前端开发的开源工具包.是目前最受欢迎的前端框架之一.下面为大家推荐17个免费的Bootstrap后台管理界面模板. 1. Admin Lite AdminLTE - 是一个完全响应式管理模板.基于Bootstrap3的框架.高度可定制的,易于使用.支持很多的屏幕分辨率适合从小型移动设备到大型台式机. 2. Dashboard Sidebar 这是一个管理后台模板,拥有控制面板或仪表板.这个模板有一个可折叠的工具栏菜单,并且有可以作为一个数据网格的表

免费的Bootstrap管理后台模板集合

Free Bootstrap Admin Templates for Designers 1. Admin Lite AdminLTE - 是一个完全响应式管理模板.基于Bootstrap3的框架.高度可定制的,易于使用.支持很多的屏幕分辨率适合从小型移动设备到大型台式机. 2. Dashboard Sidebar 这是一个管理后台模板,拥有控制面板或仪表板.这个模板有一个可折叠的工具栏菜单,并且有可以作为一个数据网格的表格. 3. DevOOPS DevOOPS是一个自适应免费管理仪表板主题,

模板集合

读入优化 1 inline int read() 2 { 3 int x = 0, f = 1; 4 char ch = getchar(); 5 while(!isdigit(ch)) 6 { 7 if(ch == '-') f = -1; 8 ch = getchar(); 9 } 10 while(isdigit(ch)) 11 { 12 x = x * 10 + ch - '0'; 13 ch = getchar(); 14 } 15 return x * f; 16 } 树状数组(单点

国内大学毕业论文 LaTeX 模板集合

西北工业大学学位论文LaTeX模板 http://code.google.com/p/nwputhesis/ 西北工业大学硕博士论文LaTeX模版 http://code.google.com/p/nputhesis/ 中国科技大学本科.硕士.博士论文LaTeX模板 http://home.ustc.edu.cn/~squall/index.html http://code.google.com/p/ustcthesis/ 其他大学: 薛瑞尼的清华大学学位论文LaTeX模板 http://sou

网易严选、京东、天猫、网易考拉海购、微小店,5种电商类原型模板集合(免费使用)

即将到来的618全民购物狂欢节,你的钱包准备好了吗? 说到网上购物,现在电商APP真的是多种多样,虽说充分满足了人们的需求,但真正能够让大家耳熟能详,愿意重复使用的电商类APP却少之又少.这里我们整理了5款较可靠.超人气的电商APP原型模板,来为你的原型设计增添灵感- 原型模板介绍 网易严选 国内首个ODM(原始设计制造商)模式的电商.网易严选APP首页主要集中展示商品内容,有“首页”.“专题”.“分类”.“购物车”.“个人”五个标签导航,分别承担着不同的功能.其中“首页”页面提供“搜索”.“消

图论模板集合

1.拓扑排序 #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <set> #include <vector> using namespace std; #define maxn 105 typedef long long ll; vector<int>