复健练习1—取模与快速幂

news2024/11/23 10:36:14

复建练习1—取模与快速幂

A,poj3070

没啥可说的,就是裸的矩阵快速幂

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip>


using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
struct martix{
	int m[2][2];
	martix operator*(const martix &b){
		martix c;
		c.m[0][0]=c.m[1][1]=0;
		for(int i=0;i<2;i++)
		for(int j=0;j<2;j++)
		for(int k=0;k<2;k++)
		c.m[i][j]=(c.m[i][j]+m[i][k]*b.m[k][j])%10000;
		return c;
	}
	martix(){
		m[0][0]=m[1][1]=1;
		m[1][0]=m[0][1]=0;
	}
};
martix quick_pow(martix a,int n){
	martix ans;
	while(n){
		if(n&1){
			ans=ans*a;
		}
		a=a*a;
		n>>=1;
	}
	return ans;
}
int n;
void solve(){
	if(n==0){
		cout<<0<<'\n';
		return ;
	}
	martix a;
	a.m[1][1]=0;
	a.m[0][1]=a.m[1][0]=1;
	a=quick_pow(a,n);
	cout<<a.m[1][0]<<'\n';
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
//	cout << setprecision(15);
	while(cin>>n&&(n+1)){
		solve();
	}
	return 0;
}

B,hdu2817

首先判断下是等差数列还是等比数列然后分开进行计算,等差数列不必多说,等比数列因为K比较大,所以跑个快速幂就可以了

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip>


using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int mod=200907;
ll quick_pow(ll a,ll n){
	ll ans=1;
	a=a%mod;
	while(n){
		if(n&1){
			ans=ans*a%mod;
		}
		n>>=1;
		a=a*a%mod;
	}
	return ans;
}
void solve(){
	ll a,b,c,k;
	cin>>a>>b>>c>>k;
	if(2*b==a+c){
		cout<<(a+(b-a)*(k-1)%mod)%mod<<'\n';
	}
	else{
		cout<<a*quick_pow(b/a,k-1)%mod<<'\n';
	}
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int T;
	cin>>T;
	while(T--){
		solve();
	}
	return 0;
}

C,hdu1061

直接跑快速幂就可以了

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip>


using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=1e6+10;
ll fastPow(ll a, ll n,ll mod)
{
	ll ans = 1;
	a %= mod;
	while (n)
	{
		if (n & 1)
			ans = (ans * a) % mod;
		a = (a * a) % mod;
		n >>= 1;
	}
	return ans;
}
void solve(){
	int n;
	cin>>n;
	cout<<fastPow(n,n,10)<<'\n';
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int T=1;
	cin>>T;
	while(T--){
		solve();
	}
	return 0;
}

D,hdu5392

题目不难,题目的意思很迷,搞了好久才明白它的意思,专业一点讲就是给一个置换,求最小置换环。通俗点讲就是起初每个人都站在一个位置,问每个人最少走多少步回到原来位置上,比如a1站在1位置,a2站在2位置,以此类推,接着每个人都可以走一步,但是走一步只能走到特定位置,拿样例第二组来说,a1起初站在位置1,他下一步只能走到位置2,因为位置1上面的数字是2,然后可以从2位置到3,3位置到4,4到5,5到6,6再到1,这系列过程走了6步回到了初始位置,枚举下其他的位置,你会发现他在一个,这个环为1-2-3-4-5-6-1,也就是说这个环长度6,所以最小环为6。再比如第一组样例,1自己在一个环上,2-3在一个环上,一个长度为1一个为2,取最小公倍数2就是答案。

有一个要注意的地方就是,这里面因为要求多个数的lcm,数也比较大,计算过程中必然要取模,所以不能直接求用欧几里得算法求lcm,而应该分解质因数,去每个质因数的最大质数相乘。

hdu好像最近出问题了,好几个题莫名tl了,甚至找了好几份别人以前a了的代码都tl了,我写的代码有点丑,看看就行

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip>
#include<vector>
#include<map>


using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=3e6+10;
const int mod=3221225473;
ll fastPow(ll a, ll n,ll mod)
{
	ll ans = 1;
	a %= mod;
	while (n)
	{
		if (n & 1)
			ans = (ans * a) % mod;
		a = (a * a) % mod;
		n >>= 1;
	}
	return ans;
}
int v[N],p[N];
int prime[N], len = 0;
void get_prime(int n) {
	for (int i = 2; i <= n; i++) {
		if (v[i] == 0) {
			v[i] = i;
			prime[len++] = v[i];
		}
		for (int j = 0; j < len; j++) {
			if (prime[j] * i > n || prime[j] > v[i])
				break;
			v[i * prime[j]] = prime[j];
		}
	}
}
int a[N];
bool vis[N];
void solve(){
	int n;
	cin>>n;
	get_prime(n);
	for(int i=1;i<=n;i++)
	cin>>a[i],vis[i]=false;
	vector<int>b;
	for(int i=1;i<=n;i++){
		if(vis[i])
		continue;
		int len=0,pos=i;
		while(!vis[pos]){
			len++;
			vis[pos]=true;
			pos=a[pos];
		}
		b.push_back(len);
	}
	map<int,int>mp;
	for(int i=0;i<b.size();i++){
		n=b[i];
			while (n!=1) {
				int x = v[n];
				int cnt=0;
				while (n % x == 0) {
					cnt++;
		            n/=x;
				}
				mp[x]=max(mp[x],cnt);
			}
	}
	ll ans=1;
	for(auto it:mp){
		ans=ans*fastPow(it.first,it.second,mod)%mod;
	}
	cout<<ans<<'\n';
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int T=1;
	cin>>T;
	while(T--){
		solve();
	}
	return 0;
}

下面是我觉得挺好看的一份代码

#include <bits/stdc++.h>

using namespace std;

const long long MOD = 3221225473;
const int N = 3e6 + 1;
int a[N], vis[N], num[N];

int main()
{
    int t, n;
    scanf("%d", &t);
    while (t--) {
        scanf("%d", &n);
        for (int i = 1; i <= n; i++) scanf("%d", &a[i]);

        memset(vis, 0, sizeof(int) * (n + 1));
        memset(num, 0, sizeof(int) * (n + 1));
        for (int i = 1; i <= n; i++) {
            if (vis[i] == 0) {
                // 计算循环长度
                int cnt = 0, k = i;
                while (vis[k] == 0)
                    vis[k] = 1, cnt++, k = a[k];
                for (int j = 2; j * j <= cnt; j++) {
                    int sum = 0;
                    if (cnt % j == 0)
                        while (cnt % j == 0) cnt /= j, sum++;
                    num[j] = max(num[j], sum);
                }
                if (cnt > 1) num[cnt] = max(num[cnt], 1);
            }
        }

        long long ans = 1;
        for (int i = 2; i <= n; i++)
            while (num[i]--) ans = ans * i % MOD;

        printf("%lld\n", ans);
    }

    return 0;
}

E,hdu3117

这个题不知道斐波那契通项公式还真做不出,因为这题还特意看了不少斐波那契数列的数学性质

当n>49时:

F(n)\approx \frac{\sqrt{5}}{5}(\frac{1+\sqrt5}{2})^n

F(n)=t\times 10^{k}

其中t<1,k是F(n)的位数

m=log_{10}F(n)=log_{10}(\frac{\sqrt{5}}{5}(\frac{1+\sqrt5}{2})^n)=nlog_{10}(\frac{1+\sqrt5}{2})-log_{10}(\sqrt5)

log_{10}F(n)=log_{10}(t\times 10^k)=log_{10}t+k

k=(int)log_{10}F(n)+1=(int)m+1

可得

t=10^{m-(int)m-1}

以上式子可以用来求斐波那契第n项的前面一些数位,比如第n项的前4位数,但是需要注意的是因为通项公式取了近似值,且近似值是大于通项公式的,所以取的位数不能过多

斐波那契数列有个尾数循环性质

斐波那契数列的个位数是一个60步的循环,最后两位数是一个300步的循环,最后三位数是一个1500步的循环,最后四位数是一个15000步的循环,最后五位数是一个150000步的循环。

根据上面两个性质我们就可以做这个题了,首先是前四项,这题难的地方就在这,根据上面的推导,我们可以知道t的大小,让它乘以10000之后就可以得到前面四位了。后面四位最直观的还是快速幂求解,但是因为有尾数循环的性质,我们可以线性预处理一下,然后O(1)查询

注意因为40以内的斐波那契数列在八位数以内,所以40以内的我们直接输出,40往上再分别输出前四位和后四位

最后需要注意的,当取的位数比较多时就不能套这个公式了,这里取的是4位

#include <iostream>
#include <stdio.h>
#include <math.h>
 
using namespace std;
 
const int N = 40;
const int N2 = 15000;
int fib[N], f[N2];
 
void maketable()
{
    fib[0] = 0;
    fib[1] = 1;
    for(int i = 2; i < N; i++)
        fib[i] = fib[i - 2] + fib[i - 1];
 
    f[0] = 0;
    f[1] = 1;
    for(int i = 2; i < N2; i++)
        f[i] = (f[i - 2] + f[i - 1]) % 10000;
}
 
int main()
{
    maketable();
 
    int n;
    while(cin >> n) {
        if(n < N)
            cout << fib[n] << endl;
        else {
            double x =   n * log10((1 + sqrt(5)) / 2.0)+log10(1 / sqrt(5));
            double y = x - (int)(x) -1;
            int ans = pow(10.0, y)*10000;
            cout << ans << "...";
            printf("%04d\n", f[n % N2]);
        }
    }
 
    return 0;
}

F,hdu6030

设dp[i] [j]为第i个糖果为j的情况数,j为0或者1

  • 因为不可能出现连续两项为0,可以得到dp[i] [1]=dp[i-1] [0]+dp[i-1] [1]
  • 因为i为0,所以i-1和i-2必然为2,可得dp[i] [0]=dp[i-3] [0]+dp[i-3] [1]

压缩一下维度得到dp[i]=dp[i-1]+dp[i-3];

因为n比较大,所以用矩阵快速幂加速递推

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;

ll _T, n;
struct mat{ ll mat[3][3];};
mat operator *(mat &a, mat &b) {
	mat c;
    memset(c.mat, 0, sizeof c.mat);
    for(int k = 0; k < 3; ++k)
        for(int i = 0; i < 3; ++i)
            for(int j = 0; j < 3; ++j)
                c.mat[i][j] = (c.mat[i][j] + a.mat[i][k] * b.mat[k][j] % mod) % mod;
    return c;
}
mat power(mat a, ll n) {
	mat c;
	memset(c.mat, 0, sizeof c.mat);	//千万记得初始化
	for(int i = 0; i < 3; i++)	c.mat[i][i] = 1;
	while(n) {
		if(n & 1) c = c * a;
		n >>= 1;
		a = a * a;
	}
	return c;
}
void run() {
	scanf("%lld", &n);
	mat a = {1, 1, 0, 0, 0, 1, 1, 0, 0};
	mat b = {3, 2, 1, 0, 0, 0, 0, 0, 0};
	a = power(a, n - 2);
	a = b * a;
	printf("%lld\n", a.mat[0][0] % mod);
}
int main() {
	scanf("%lld", &_T);
	while(_T--)	run();
    return 0;
}

G,hdu5895

首先第一眼肯定需要进行欧拉降幂,但是难点在于g(n*y)怎么求,网上看到有用g(n)=f(n) *f(n-1)/2来写的,但是要用逆元来写,感觉蛮麻烦的,后面想了个矩阵转移感觉还行。

首先我们对两个式子展开可以得到f(n) ^ 2=4f(n-1)f(n-2)+f(n-2) ^ 2+4f(n-1) ^ 2,f(n)f(n-1)=2f(n-1)^2+f(n-1)*f(n-2)接着我们就可以愉快地转移了

首先是转移矩阵base={ {1,4,4,1},{0,4,4,1},{0,2,1,0},{0,1,0,0} },然后是答案矩阵的形式a= {{g(n)},{f(n) ^ 2},{f(n-1)*f(n)},{f(n-1) ^ 2}},很显然,答案矩阵为base ^ (n-1) *a,然后我们就能得到了g(n *y)了,然后就是欧拉降幂公式了,令n=g(n *y),s=s+1,把,那么x^ n%s=(x^(n%phi(s)+phi(s)))%s。注意这个地方求欧拉函数看起来只有1e8范围,可以直接预处理,但实际上会me,所以我们需要直接计算欧拉函数,这一步用欧拉函数通项公式就行了,根号n复杂度

欧拉降幂这一步看到有人因为s比较大不能直接预处理出来,采用了中国剩余定理

然后看了眼他的代码,兜兜转转求欧拉函数还是回到了试除法求欧拉函数,多多少少这个剩余定理用的有点鸡肋,不过还是有点启发,可以对除数进行分解然后转换为同余方程组求解。

ll phi(ll n) {
	ll ans = n;
	for (ll i = 2; i * i <= n; ++i) {
		if (n % i) continue;
		ans = ans / i * (i - 1);
		while (n % i == 0) n /= i;
	}
	if (n != 1) ans = ans / n * (n - 1);
	return ans;
}
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip>


using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 1e8 + 10;
ll base[4][4] = { {1,4,4,1},{0,4,4,1},{0,2,1,0},{0,1,0,0} };
ll phi(ll n) {
	ll ans = n;
	for (ll i = 2; i * i <= n; ++i) {
		if (n % i) continue;
		ans = ans / i * (i - 1);
		while (n % i == 0) n /= i;
	}
	if (n != 1) ans = ans / n * (n - 1);
	return ans;
}
ll mod;
struct martix {
	ll m[4][4];
	martix operator*(const martix& p) {
		martix c;
		for (int i = 0; i < 4; i++)
			for (int j = 0; j < 4; j++) {
				for (int k = 0; k < 4; k++) {
					c.m[i][j] = (m[i][k] * p.m[k][j] + c.m[i][j]) % mod;
				}
			}
		return c;
	}
	martix() {
		for (int i = 0; i < 4; i++)
			for (int j = 0; j < 4; j++)
				m[i][j] = 0;
	}
};
martix quick_pow(ll n) {
	martix a,ans;
	for (int i = 0; i < 4; i++)
		ans.m[i][i] = 1;
	for (int i = 0; i < 4; i++)
		for (int j = 0; j < 4; j++)
			a.m[i][j] = base[i][j];
	while (n) {
		if (n & 1) {
			ans = ans * a;
		}
		a = a * a;
		n >>= 1;
	}
	return ans;
}
ll quick_pow(ll a, ll n) {
	ll ans = 1;
	while (n) {
		if (n & 1)
			ans = ans * a % mod;
		a = a * a % mod;
		n >>= 1;
	}
	return ans;
}

void solve() {
	ll n, y, s, x;
	cin >> n >> y >> x >> s;
	n *= y;
	s = s + 1;
	if (n == 0) {
		cout << 0 << '\n';
		return;
	}
	mod = phi(s);
	martix ans = quick_pow(n-1);
	ll a[4][1] = {1,1,0,0}, b[4][1] = {0,0,0,0};
	for (int i = 0; i < 4; i++)
		for (int j = 0; j < 1; j++)
			for (int k = 0; k < 4; k++)
				b[i][j] = (b[i][j] + ans.m[i][k] * a[k][j]) % mod;
	n = b[0][0]+phi(s);
	mod = s;
	cout << quick_pow(x, n) << '\n';
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int T = 1;
	cin >> T;
	while (T--) {
		solve();
	}
	return 0;
}

H,hdu5564

这题真的思维有点难,思路大概如下,有一些错误就是dp方程左边的的i应该为i+1

其实方程不难想,但是把维度压缩的方式和对第70列进行处理从而求的前缀和没遇到过是真的蛮难想到的

而且写代码时不注意也会犯很多细节错误,我调了一下午才过。。。写的也比较丑

贴一份别人的代码吧

#include <iostream>
#include <cstdio>
#include <cstring>
#include <set>
#include <map>
#include <stack>
#include <vector>
#include <string>
#include <queue>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
typedef pair<int, int> pii;
typedef unsigned long long ull;
typedef long long ll;
typedef vector<int> vi;
#define xx first
#define yy second
#define rep(i, a, n) for(int i = a; i < n; i++)
#define vep(c) for(decltype((c).begin()) it = (c).begin(); it != (c).end(); it++)
int mod = int(1e9) + 7, INF = 0x3fffffff, maxn = 1e5 - 1;

ll st[71], ed[71];

int compressor(int i, int j)
{
    return i * 7 + j;
}

class matrix
{
public:
    ll v[71][71];
    matrix(void) {
        memset(v, 0, sizeof(v));
    }
    matrix operator*(matrix& a) {
        matrix ans, b = *this;
        rep(i, 0, 71) {
            rep(j, 0, 71) {
                rep(k, 0, 71) {
                    ans.v[i][j] = (ans.v[i][j] + b.v[i][k] * a.v[k][j]) % mod;
                }
            }
        }
        return ans;
    }
    matrix operator^(int b) {
        matrix ans, a = *this;
        if (b < 0) return ans;
        rep(i, 0, 71) ans.v[i][i] = 1;
        while (b) {
            if (b & 1) ans = ans * a;
            a = a * a;
            b >>= 1;
        }
        return ans;
    }
};

int main(void)
{
    int T;
    scanf("%d", &T);
    rep(i, 1, 10) st[compressor(i, i % 7)]++;
    while (T--) {
        int l, r, m;
        scanf("%d%d%d", &l, &r, &m);
        matrix x;
        rep (l, 0, 10) {
            rep (j, 0, 10) {
                if (l + j == m) continue;
                rep (k, 0, 7) {
                    x.v[compressor(j, k)][compressor(l, (k * 10 + l) % 7)] = 1;
                }
            }
        }
        rep (i, 0, 10) x.v[compressor(i, 0)][70] = 1;
        x.v[70][70] = 1;

        matrix x1 = x ^ (r - 1);

        memset(ed, 0, sizeof(ed));
        rep (i, 0, 71) {
            rep (j, 0, 71) {
                ed[i] += st[j] * x1.v[j][i] % mod;
            }
        }
        ll ansr = ed[70];
        rep (i, 0, 10) ansr = (ansr + ed[compressor(i, 0)]) % mod;

        matrix x2 = x ^ (l - 2);
        memset(ed, 0, sizeof(ed));
        rep (i, 0, 71) {
            rep (j, 0, 71) {
                ed[i] += st[j] * x2.v[j][i] % mod;
            }
        }
        ll ansl = ed[70];
        rep (i, 0, 10) ansl = (ansl + ed[compressor(i, 0)]) % mod;
        printf("%lld\n", (ansr - ansl + mod) % mod);
    }
    return 0;
}


I,hdu2243

看题解是个AC自动机+矩阵的题,不会自动机,贴一份别人的代码,等学了自动机再来看看

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair <ll,ll> pii;
#define rep(i,x,y) for(int i=x;i<y;i++)
#define rept(i,x,y) for(int i=x;i<=y;i++)
#define per(i,x,y) for(int i=x;i>=y;i--)
#define all(x) x.begin(),x.end()
#define pb push_back
#define fi first
#define se second
#define mes(a,b) memset(a,b,sizeof a)
#define mp make_pair
#define dd(x) cout<<#x<<"="<<x<<" "
#define de(x) cout<<#x<<"="<<x<<"\n"
#define debug() cout<<"I love Miyamizu Mitsuha forever.\n"
const int inf=0x3f3f3f3f;
const int maxn=105;


class matrix
{
    public:
        ull arrcy[35][35];
        int row,column;
        matrix()
        {
            memset(arrcy,0,sizeof arrcy);
            column=row=0;
        }
        friend matrix operator *(matrix s1,matrix s2)
        {
            int i,j;
            matrix s3;
            for (i=0;i<s1.row;i++)
            {
                for (j=0;j<s2.column;j++)
                {
                    for (int k=0;k<s1.column;k++)
                    {
                        s3.arrcy[i][j]+=s1.arrcy[i][k]*s2.arrcy[k][j];
                    }
                }
            }
            s3.row=s1.row;
            s3.column=s2.column;
            return s3;
        }
        void show()
        {
            for(int i=0;i<row;i++)
            {
                for (int j=0;j<column;j++)
                    cout<<arrcy[i][j]<<" ";
                cout<<endl;
            }
        }
}mat,mul;
matrix quick_pow(matrix s1,long long n)
{
    matrix mul=s1,ans;
    ans.row=ans.column=s1.row;
    memset(ans.arrcy,0,sizeof ans.arrcy);
    for(int i=0;i<ans.row;i++)
        ans.arrcy[i][i]=1;
    while(n)
    {
        if(n&1) ans=ans*mul;
        mul=mul*mul;
        n>>=1;
    }
    return ans;
}

ull qpow(ull a,ull b)
{
    ull ans=1;
    for(;b;b>>=1,a=a*a)
        if(b&1) ans*=a;
    return ans;
}
class Trie
{
    public:
        Trie()
        {
            cnt=1;
        }
        int cnt;
        int trie[maxn][26];
        int fail[maxn];
        bool bad[maxn];
        void init()
        {
            rep(i,0,cnt)
            {
                fail[i]=bad[i]=0;
                rep(j,0,26) trie[i][j]=0;
            }
            cnt=1;
        }
        void insert(string s)
        {
            int len=s.size();
            int pos=0;
            rep(i,0,len)
            {
                int next=s[i]-'a';
                if(!trie[pos][next]) trie[pos][next]=cnt++;
                pos=trie[pos][next];
            }
            bad[pos]=1;
        }
        void getfail()
        {
            queue<int> q;
            rep(i,0,26)
            {
                if(trie[0][i])
                {
                    fail[trie[0][i]]=0;
                    q.push(trie[0][i]);
                }
            }
            while(!q.empty())
            {
                int pos=q.front();
                q.pop();
                rep(i,0,26)
                {
                    bad[pos]|=bad[fail[pos]];
                    if(trie[pos][i])
                    {
                        fail[trie[pos][i]]=trie[fail[pos]][i];
                        q.push(trie[pos][i]);
                    }
                    else trie[pos][i]=trie[fail[pos]][i];
                }
            }
        }
}ac;
string s;
ull cal(ll x)
{
    matrix l,r;
    r.row=2;r.column=1;
    r.arrcy[0][0]=0;
    r.arrcy[1][0]=1;
    l.row=l.column=2;
    l.arrcy[0][0]=l.arrcy[0][1]=26;
    l.arrcy[1][0]=0;l.arrcy[1][1]=1;
    r=quick_pow(l,x)*r;
    return r.arrcy[0][0];
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n,l;
    while(cin>>n>>l)
    {
        ac.init();
        mes(mul.arrcy,0);mes(mat.arrcy,0);
        rep(i,0,n)
        {
            cin>>s;
            ac.insert(s);
        }
        ac.getfail();
        mat.row=1;
        mat.column=ac.cnt+1;
        mat.arrcy[0][0]=1;
        mul.row=mul.column=ac.cnt+1;
        rep(i,0,ac.cnt)
        {
            if(ac.bad[i]) continue;
            rep(j,0,26)
            {
                if(!ac.bad[ac.trie[i][j]]) mul.arrcy[i][ac.trie[i][j]]++;
            }
        }
        rep(i,0,mul.column) mul.arrcy[i][mul.column-1]=1;
        mat=mat*quick_pow(mul,l);
        ull ans=0;
        rep(i,0,mat.column) ans=(ans+mat.arrcy[0][i]);
        ans--;
        ull cnt=cal(l);
        cnt-=ans;
        cout<<cnt<<"\n";
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/721904.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务: 03-rabbitmq在springboot中如何使用(下篇)

目录 前言: 上文传送 4.六大模式实际操作(续) 4.4 路由模式: ---> 4.4.1 消费者配置类 ---> 4.4.2 消费者代码 --->4.4.3 生产者代码 4.5 主题模式: (路由升级版) ---> 4.5.1 消费者配置类 ---> 4.5.2 消费者代码 ---> 4.5.3 生产者代码 ---&g…

【大语言模型】15分钟快速掌握LangChain以及ChatGLM

10分钟快速掌握LangChain LangChain简介LangChain中的核心概念1. Components and Chains2. Prompt Templates and Values3. Example Selectors4. Output Parsers5. Indexes and Retrievers6. Chat Message History7. Agents and Tookits LangChain的代码结构1. LangChain中提供…

Ubuntu学习笔记(一)——目录与路径

文章目录 前言一、相对路径与绝对路径1.绝对路径&#xff08;absolute&#xff09;2.相对路径&#xff08;relative&#xff09; 二、目录相关操作命令1.cd(change directory, 切换目录)2.pwd(print working directory, 显示目前所在的目录)3.mkdir(make directory, 建立新目录…

Versioning data and models for rapid experimentation in machine learning

翻译博客&#xff1a;https://medium.com/pytorch/how-to-iterate-faster-in-machine-learning-by-versioning-data-and-models-featuring-detectron2-4fd2f9338df5 在本文中&#xff0c;您将学习如何创建和使用版本化的数据集作为可重现的机器学习流程的一部分。为了说明这一…

自定义MVC工作原理

目录 一、MVC二、MVC的演变2.1 极易MVCController层——Servletview层——JSP缺点&#xff1a;Servlet过多、代码冗余 2.2 简易MVCController层——Servletview层——JSP缺点&#xff1a;在Servlet中if语句冗余 2.3普易MVCController层——Servletview层——JSP缺点&#xff1a…

OBS播放NDI源

下载OBS Studio的NDI运行时和插件 https://github.com/obs-ndi/obs-ndi/releases 下载文章中的下面这两个文件,并直接双击安装。 或者从百度云下载也行: 链接:https://pan.baidu.com/s/1vNn1yMdCy6BZkKxKCq-kDw 提取码:cxxg 安装完成之后,打开OBS Studio 点击加号添…

RabbitMQ系列(11)--RabbitMQ交换机(Exchange)简介

1、交换机概念 生产者生产的消息从不会直接发送到队列&#xff0c;生产者只能把消息发送到交换机&#xff08;Exchange&#xff09;&#xff0c;交换机接收来着生产者的消息&#xff0c;另一方面把消息推入队列&#xff0c;交换机必须知道如何处理收到的消息&#xff0c;是应该…

【设计模式】第十五章:责任链模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章&#xff1a;单例模式 【设计模式】第二章&#xff1a;工厂模式 【设计模式】第三章&#xff1a;建造者模式 【设计模式】第四章&#xff1a;原型模式 【设计模式】第五章&#xff1a;适配器模式 【设计模式】第六章&…

银河麒麟服务器v10 sp1 nginx开机自动启动

接上一篇&#xff1a;银河麒麟服务器v10 sp1 安装 nginx_csdn_aspnet的博客-CSDN博客 设置开机自启动 定义服务启动文件内容&#xff1a; [Unit] Descriptionnginx - high performance web server Afternetwork.target remote-fs.target nss-lookup.target [Service] Ty…

menuconfig selected by 怎么处理

比方说我想取消掉flex&#xff0c;但是被强制生成了&#xff1a; 输入搜索命令查了一下&#xff1a; 搜一下selected by [y] 中的 linux_pam: 取消掉 这样就不用编flex了。

【HarmonyOS】元服务启动命令漫谈

在日常开发中&#xff0c;我们可以通过DevEco Studio&#xff0c;直接Run我们的元服务工程&#xff0c;在测试机上拉起我们开发的元服务页面。但是我们自己打包HarmonyOS元服务hap在手机上安装后是没有桌面图标的。虽然我们可以在设置的服务管理中找到我们安装的元服务&#xf…

Go语言操作MySql数据库

go-sql-driver/mysql库是Go语言官方推荐的MySQL驱动库&#xff0c;可以很方便地实现对MySQL数据库的连接和操作。本文记录以下使用go-sql-driver/mysql数据库驱动来操作mysql数据库。 目录 1.安装驱动程序 2.导入驱动包 3.操作数据库 3.1 获取mysql版本 3.2 创建表 3.3 …

详解JAVA Socket

目录 1.概述 2.使用 3.使用场景 3.1.web server中的网络通信 3.2.长连接 3.3.性能问题 1.概述 什么是网络通信&#xff1a; 就像打电话一样&#xff0c;两点间要通信&#xff0c;两点间就必须有连接&#xff0c;为了实现任意两个节点之间的通信&#xff0c;我们就必须采…

用户与组管理介绍

文章目录 一、服务器系统版本介绍二、用户管理1. 用户概述2. 内置账户3. 配置文件4. 用户管理命令 三、组管理1. 组概述2. 内置组&#xff08;系统自带的组&#xff09;3. 组管理命令 一、服务器系统版本介绍 Windows服务器系统&#xff1a;win2000、win2003、win2008、win2012…

Spring 与 Servlet-2

学习笔记&#xff08;加油呀&#xff09;&#xff1a; Spring的通知类型 Spring 通知类型按切面功能调用的不同时刻&#xff0c;可以分为提供了 5 种 Advice 类型 1、前置通知 Before advice&#xff1a;在某连接点之前执行的通知&#xff0c;但这个通知不能阻止连接点之前的…

SAP ABAP ALV FIELDCAT 字段设置详细说明

一、SAP ABAP ALV FIELDCAT 字段设置的位置&#xff1a; 二、SAP ABAP ALV FIELDCAT 字段设置的详细说明&#xff1a; 字段属性描述使用目的CFIELDNAME参照Currency单位的字段名根据单位显示相应值CHECKBOX设置成复选框字段输出选项COL POS字段的输出顺序字段输出选项COLDDICT…

Android Studio实现内容丰富的安卓视频管理平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号081 1.开发环境 android stuido 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.本地视频 3.视频播放 4.收藏功能 5.网路视频…

R语言绘图丨论文中最常用箱线图绘制教程,自动进行显著性检验和误差线标注

多组比较式箱线图 在科研论文绘图中&#xff0c;对于多组数据进行比较一般采用箱线图的方法&#xff0c;今天分享一下这个经典数据可视化方法&#xff0c;从零开始绘制一张带误差棒并自动计算显著性比较结果的箱线图。 前言&#xff1a;箱线图有什么优势&#xff1f; 数据分布…

【AcWing算法基础课】第三章 搜索与图论

文章目录 前言课前温习一、深度优先搜索&#xff08;DFS&#xff09;1、排列数字1.1题目描述1.2思路分析1.3代码实现 2、 n-皇后问题1.4题目描述1.5思路分析1.6代码实现 二、宽度优先搜索&#xff08;BFS&#xff09;1、走迷宫2.1题目描述2.2思路分析2.3代码实现 三、树与图的存…

2023.07.05 ARM day6

实验1 1.在键盘输入一个字符&#xff0c;串口工具进行显示 2.例如&#xff1a;在在键盘输入一个字符a,串口工具进行显示b 实验2 1.在键盘输入一个字符串&#xff0c;串口工具进行显示 2.例如&#xff1a;在在键盘输入一个字符串“huyue”,串口工具进行显示“huyue” inclu…