Logo yyhs_wuzichen的博客

博客

标签

linux对拍

2023-11-16 17:44:00 By yyhs_wuzichen
#include<bits/stdc++.h>
using namespace std;
int main()
{
    do
    {
        printf("AC\n");
        system("./datamaker");
        system("./std");
        system("./com");
    }while(!system("diff std.out com.out"));
    printf("WA\n");
}

Pell(封装了的矩阵乘法、轻度压行、c++11中编译失败)

2023-07-18 16:24:17 By yyhs_wuzichen

题⽬描述

    Pell数列的定义是a[1]=1,a[2]=2,......,a[n]=2*a[n-1]+a[n-2] (n>2),给出正整数k,求第k项模32764是多少

输⼊格式

    第一行一个整数n表示组数。 后n行(0≤n≤5),每组包括一个正整数k

输出格式 输出n个整数表示答案

#include<bits/stdc++.h>
using namespace std;
long long read()
{
    long long x=0,t=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')t=-t;ch=getchar();}
    while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    return x*t;
}
int mo=32764;
struct VECTOR{int v[2];};
struct MATRIX{VECTOR m[2]={(VECTOR){1,0},(VECTOR){0,1}};};
VECTOR operator * (MATRIX a,VECTOR b)
{return (VECTOR){{(a.m[0].v[0]*b.v[0]+a.m[1].v[0]*b.v[1])%mo,(a.m[0].v[1]*b.v[0]+a.m[1].v[1]*b.v[1])%mo}};}
MATRIX operator * (MATRIX a,MATRIX b)
{
    MATRIX res;res.m[0]=a*b.m[0];res.m[1]=a*b.m[1];
    return res;
}
MATRIX ksm(MATRIX a,long long b)
{
    MATRIX tmp=a,res;
    while(b)
    {
        if(b&1)res=res*tmp;
        tmp=tmp*tmp;b>>=1;
    }
    return res;
}
int main()
{
    MATRIX om;VECTOR ov,p;
    p.v[0]=0;p.v[1]=1;om.m[0]=p;p.v[0]=1;p.v[1]=2;om.m[1]=p;ov.v[0]=1;ov.v[1]=2;
    int t=read();
    while(t--)printf("%d\n",(ksm(om,read()-1)*ov).v[0]);
}

封装了的高精度算法

2023-07-04 13:29:18 By yyhs_wuzichen
typedef vector<int> T;
struct BigInt
{
    T V;
    BigInt(T _V):V(_V){}
    BigInt(const BigInt &x):V(x.V){}
    BigInt(int x=-1){V.clear();if(x==-1)return;do V.push_back(x%10); while(x/=10);}
    BigInt & operator=(const BigInt &x){V=x.V;return *this;}
    BigInt & operator=(const T &x){V=x;return *this;}
    BigInt & operator=(int x){return *this=BigInt(x);}
    T::iterator begin(){return V.begin();}
    T::iterator end(){return V.end();}
    T::reverse_iterator rbegin(){return V.rbegin();}
    T::reverse_iterator rend(){return V.rend();}
    void show(){for(T::reverse_iterator it=V.rbegin();it!=V.rend();++it)putchar(*it+'0');putchar('\n');}
    void push_back(const int &x){V.push_back(x);}
    int size(){return V.size();}
    friend BigInt operator+(BigInt,BigInt);
    friend BigInt operator*(BigInt,BigInt);
    friend BigInt max(BigInt,BigInt);
};
BigInt operator+(BigInt x,BigInt y)
{
    T z;
    int k=0;
    for(int ix=0,iy=0;iy<y.size()||ix<x.size();ix++,iy++)
    {
        int p=k;
        if(ix<x.size())p+=x.V[ix];
        if(iy<y.size())p+=y.V[iy];
        k=p/10;p%=10;z.push_back(p);
    }
    if(k)z.push_back(k);
    return z;
}
BigInt operator*(BigInt x,BigInt y)
{
    T z;
    if(x.size()<y.size())swap(x,y);
    for(int iy=0,k=0;iy<y.size();iy++,k=0)
    {
        for(int ix=0;ix<x.size();ix++)
        {
            int p=k+x.V[ix]*y.V[iy];
            if(ix+iy>=z.size())k=p/10,p%=10,z.push_back(p);
            else p+=z[ix+iy],k=p/10,p%=10,z[ix+iy]=p;
        }
        if(k)z.push_back(k);
    }
    return z;
}
BigInt min(BigInt x,BigInt y)
{
    if(x.size()==0)return y;
    if(y.size()==0)return x;
    if(x.size()<y.size())return x;
    if(y.size()<x.size())return y;
    for(int i=x.size()-1;i>=0;i--)
    {
        if(x.V[i]<y.V[i])return x;
        if(y.V[i]<x.V[i])return y;
    }
    return x;
}

使用: BigInt a,b,c; a=(int)x;b=(int)y; c=a+b;c=a*b;c=min(a,b); c.show(); //带换行的输出

共 3 篇博客