模板——其它

int m = 63-__builtin_clzll( ss ); //保留ss的最高位1对拍

点击查看代码
#include<bits/stdc++.h>
using namespace std;
ifstream a,b;
int main(){
	for(int i=0;;i++){
		if(i%10==0)cerr<<i<<endl;
		system("datamaker.exe > data.txt");
		system("A.exe < data.txt > a.out");
		system("B.exe < data.txt > b.out");
		a.open("a.out");
		b.open("b.out");
		while(a.good() || b.good()){
			if(a.get()!=b.get()){
				system("pause");
				return 0;
			}
		}
		a.close(),b.close();
	}
}

矩阵&向量(主要用于优化DP)

向量为横向,即向量右乘矩阵=向量

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5,M=11;
const int P=1e9+7;
void inc(int& x,int y){
    x+=y;
    if(x>=P) x-=P;
}
int prd(int x,int y){
    return 1ll*x*y%P;
}
int fpw(int a,int x){
    int s=1;
    for(;x;x>>=1,a=prd(a,a)) if(x&1) s=prd(s,a);
    return s;
}
struct mtx{
    int a[M][M];
    void init(int _n){
        for(int i=0;i<M;i++) for(int j=0;j<M;j++){
                if(i==j) a[i][i]=_n;
                else a[i][j]=0;
            }
    }
    void put(char ch){
        printf("%c\n",ch);
        for(int i=0;i<M;i++){
            for(int j=0;j<M;j++) {
                cout<<a[i][j]<<" ";
            }
            puts("");
        }
    }
    mtx operator * (mtx u){
        mtx v;
        v.init(0);
        for(int k=0;k<M;k++){
            for(int i=0;i<M;i++) for(int j=0;j<M;j++) inc(v.a[i][j],prd(a[i][k],u.a[k][j]));
        }
        return v;
    }
};
struct vec{
    int a[M];
    vec(int _n){
        for(int j=0;j<M;j++){
            if(!j) a[j]=_n;
            else a[j]=0;
        }
    }
    void put(){
        for(int i=0;i<M;i++) cout<<a[i]<<" "; puts("");
    }
    vec operator * (mtx u){
        vec v(0);
        for(int k=0;k<M;k++){
            for(int i=0;i<M;i++) inc(v.a[i],prd(a[k],u.a[k][i]));
        }
        return v;
    }
};
posted @ 2023-05-16 21:46  sz[sz]  阅读(7)  评论(0编辑  收藏  举报