ACM-ICPC 2018 焦作赛区网络预赛 - L. Poor God Water (矩阵快速幂)

Crossformer实战:从零开始搭建多变量时间序列预测模型(附ETTh1数据集调参指南) 本文提供了从零开始搭建Crossformer多变量时间序列预测模型的实战指南,并附有详细的ETTh1数据集调参攻略。文章深入解析了Crossformer的核心设计,重点探讨了seg_len和win_size等关键参数对模型性能的影响,并分享了环境配置、训练调试及常见问题的解决方案,帮助开发者高效应用这一前沿深度学习模型。 阅读详情

https://nanti.jisuanke.com/t/31721

题意:

给你,肉、鱼、巧克力,让你找到有几种长度为n的排列。每3个长度满足条件。

当3种食物连续出现,巧克力不能在中间。

一种食物不能连续出现3次。

两边都是巧克力也不行。(针对长度为3的子串)


POINT:

把巧克力=0,其他为1,2。

可知长度为2的答案有9种。00,01,02,……,22

那么长度为3的怎么算。我们保存串的最后两个食物。

这样长度为2的这9种答案分别加上0,1,2,推到长度为3的答案。

比如00=10+20(即最后两位都是0的答案可以由10+0 20+0得到,00+0不符合题意)

比如01=00+10 (00+1,10+1)。

02=00+20。这样得到9个递推式。用矩阵快速幂加快速度即可。

 

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define  LL long long
const LL mod = 1e9+7;
struct node
{
	LL a[9][9];
	void init(){
		memset(a,0,sizeof a);
	}
	node friend operator * (node a,node b)
	{
		node c;
		c.init();
		for(int k=0;k<9;k++)
		for(int i=0;i<9;i++)
		for(int j=0;j<9;j++){
			c.a[i][j]+=a.a[i][k]*b.a[k][j]%mod;
			c.a[i][j]%=mod;
		}
		return c;
	}
};

node qkm(node base,LL mi)
{
	node ans;
	for(int i=0;i<9;i++)
		for(int j=0;j<9;j++)
			ans.a[i][j]=(i==j);
	while(mi){
		if(mi&1) ans=ans*base;
		base=base*base;
		mi>>=1;
	}
	return ans;
}

int main()
{
	int T;
	scanf("%d",&T);
	while(T--){
		LL n;
		scanf("%lld",&n);
		int base[9][9]={
			0,1,1,0,0,0,0,0,0,
			0,0,0,0,1,1,0,0,0,
			0,0,0,0,0,0,0,1,1,
			1,1,0,0,0,0,0,0,0,
			0,0,0,1,0,1,0,0,0,
			0,0,0,0,0,0,1,1,1,
			1,0,1,0,0,0,0,0,0,
			0,0,0,1,1,1,0,0,0,
			0,0,0,0,0,0,1,1,0,
		};
		if(n==1)
		{
			printf("3\n");
			continue;
		}
		node a;
		for(int i=0;i<9;i++){
			for(int j=0;j<9;j++)
				a.a[i][j]=base[i][j];
		}
		a=qkm(a,n-2);
		LL ans=0;
		for(int i=0;i<9;i++)
			for(int j=0;j<9;j++)
				ans=(ans+a.a[i][j])%mod;
		printf("%lld\n",ans);

	}
	
	return 0;
}

 

 

还有一种,也是二进制优化,在赛中胡乱搞得。

dp[x][y][z][xx][yy]代表长度为1<<z这个串 开头两个为xy,结尾两个为xx,yy的个数。

这样可以得到2进制整数的各个串的答案。

然后把n这个数用这些二进制的串 接起来就行了。写起来比较麻烦。

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define LL long long
const LL N = 1e5 + 10;

const LL mod = 1e9+7;
LL dp[3][3][40][3][3];


void add(LL x,LL a,LL b,LL c,LL d)
{
    for(LL j=0; j<3; j++)
    {
        for(LL k=0; k<3; k++)
        {
            for(LL jj=0; jj<3; jj++)
            {
                for(LL kk=0; kk<3; kk++)
                {
                    dp[j][k][x][jj][kk]+=dp[j][k][x-1][a][b]*dp[c][d][x-1][jj][kk]%mod;
                    dp[j][k][x][jj][kk]%=mod;
                }

            }
        }
    }
}

LL f(LL x)
{
    if(x==0||x==111||x==222||x==21||x==120||x==202||x==212)
        return 0;
    return 1;
}

LL check(LL a,LL b,LL c,LL d)
{
    LL s1=a*100+b*10+c;
    LL s2=b*100+c*10+d;
    if(f(s1)&&f(s2))
        return 1;
    return 0;
}
LL p=0;
void init()
{
    memset(dp,0,sizeof dp);
    for(LL i=0; i<3; i++)
        for(LL j=0; j<3; j++)
            dp[i][j][1][i][j]=1;

    for(LL i=2; (1LL<<i)<=1e10; i++)
    {
        LL p=0;
        for(LL j=0; j<3; j++)
        {
            for(LL k=0; k<3; k++)
            {
                for(LL jj=0; jj<3; jj++)
                {
                    for(LL kk=0; kk<3; kk++)
                        if(check(j,k,jj,kk))
                        {
                            p++;
                            add(i,j,k,jj,kk);
                        }
                }
            }
        }
    }
}

LL ans[3][3];
LL to=0;
void ff(LL x)
{
    for(LL j=0; j<3; j++)
        for(LL k=0; k<3; k++)
            for(LL jj=0; jj<3; jj++)
                for(LL kk=0; kk<3; kk++)
                    ans[jj][kk]+=dp[j][k][x][jj][kk],ans[jj][kk]%=mod;

}

void fff(LL x)
{
    LL temp[3][3];
    memset(temp,0,sizeof temp);
    for(LL j=0; j<3; j++)
        for(LL k=0; k<3; k++)
            for(LL jj=0; jj<3; jj++)
                for(LL kk=0; kk<3; kk++)
                {
                    if(check(j,k,jj,kk)){
                        for(LL a=0;a<3;a++){
                            for(LL b=0;b<3;b++){
                                temp[a][b]+=ans[j][k]*dp[jj][kk][x][a][b]%mod;
                                temp[a][b]%=mod;
                            }
                        }
                    }
                }

    for(LL i=0;i<3;i++)
        for(LL j=0;j<3;j++){
        ans[i][j]=temp[i][j];
    }
}

int main()
{
    init();
    LL T;
    scanf("%lld",&T);
    while(T--){
        LL n;
        scanf("%lld",&n);
        memset(ans,0,sizeof ans);
        if(n==1){
            printf("3\n");
            continue;
        }
        LL i;

        for(i=40;i>=1;i--){
            if((1LL<<i)&n){
                ff(i);
                break;
            }
        }
        i--;
        for(;i>=0;i--){
            if((1LL<<i)&n){
                if(i==0){

                }else{
                    fff(i);
                }
            }
        }
        LL sum=0;
        if(n&1){
            for(LL i=0;i<3;i++){
                for(LL j=0;j<3;j++){
                    for(LL k=0;k<3;k++){
                        LL a=j*100+k*10+i;
                        if(f(a)){
                            sum+=ans[j][k];
                            sum%=mod;
                        }
                    }
                }
            }
        }else{
            for(LL j=0;j<3;j++)
                for(LL k=0;k<3;k++)
                    sum+=ans[j][k],sum%=mod;
        }
        cout<<sum<<endl;

    }


    return 0;
}

 

Jetson编译安装pycuda 可使用nvcc --version查看是否有信息输出,若没有,且安装cuda的情况下,需要手动将CUDA 的路径添加到环境变量中。编译生成_pvt_struct.cpython-38-aarch64-linux-gnu.so文件。基于jetson orin nano jetpack512模块上安装pycuda。4、获取pycuda源码(版本根据实际情况获取)2、进入conda环境并安装cuda工具包。9、若未检测出来需要清除并强制编译。7、编译成功后安装pycuda。5、配置编译并设置环境变量。 阅读详情

相关推荐

Tiff、jpg图片怎么样添加地理坐标信息

Tiff、jpg图片怎么样添加地理坐标信息 一般,外业调查只有地图资料,如专题图、或者地形图,如何把这些地图资料的扫描地图带上坐标信息,从而内业实现信息化处理?以上问题,可以解决,但根据不同情况有不同的处理方法。     第一种,上面有经纬度外框,图片是矩形,但是没有地理信息。 通过图框的两个角的坐标确定范围,分别是左上(140°E,30°N);右下(150°W,30°N) 解决方

树木_xzw的博客 2万+

ACM-ICPC 2018 焦作赛区网络预赛 Poor God Water (水题+矩阵快速幂)

题目链接:https://nanti.jisuanke.com/t/31721 #include&lt;bits/stdc++.h&gt; using namespace std; #define debug puts("YES"); #define rep(x,y,z) for(int (x)=(y);(x)&lt;(z);(x)++) #define read(x,y) scanf("%d...

满月照亮的路 844

raw_count、tpm、fpkm、rpkm如何选择

转录组测序中常见的数据类型有:raw_count、tpm、fpkm、rpkm。本文进行简单辨析: 一、概念 1 raw_count RNA-seq数据中,raw_count一般是指mapped到基因外显子区域的reads数目。比如说htseq,STAR,或者RSEM等NGS分析流程计算产生的counts值。其中RSEM(RNA-Seq by Expectation-Maximization),考虑到一条read 可能会匹配多个exon位置,故而其产生的为expected_count。 2 TPM

weixin_59289660的博客 1万+

ACM-ICPC 2018 焦作赛区网络预赛 L. Poor God Water

传送门:https://nanti.jisuanke.com/t/31721 God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him that some sequence of eating will make them poisonous. Every...

智熄 486

从零到一:3D-ResNet50在医学影像中的实战陷阱与避坑指南

本文深入探讨了3D-ResNet50在医学影像分类中的实战应用,重点解析了NIFTI数据预处理、小样本迁移学习陷阱及GPU显存优化等关键问题。通过分块加载、混合精度训练等技巧,有效解决了医学影像处理中的内存管理和性能挑战,为开发者提供了实用的避坑指南和优化策略。

weixin_29038345的博客 390

数字盲水印嵌入和提取的实现基于小波变换DWT算法

数字盲水印是指在不知道原始图像的情况下,在其上嵌入水印并在后续的提取过程中能够恢复出原始水印的一种技术。本文介绍的数字盲水印嵌入和提取的实现方法基于小波变换DWT算法。具体来讲,DWT将信号或图像进行二次下采样和卷积滤波,使得高频分量的图像信息被集中在一个小区域内,方便进行嵌入和提取操作。其中 a 表示嵌入强度,而 watermark 则是用于嵌入的水印图像,这里我们嵌入的是一个全灰的图像。通过以上的代码,我们可以实现数字盲水印的嵌入和提取,并在一定程度上保护数字图片的版权安全。

HackWhisper的博客 511

ACM-ICPC 2018 焦作赛区网络预赛 L - Poor God Water

// #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;cstdio&gt; #include &lt;string&gt; #include &lt;cstring&gt; #include &lt;map&gt; #include &lt;algorithm&gt; #include &lt;queue&a

一只小陀螺的博客 659

基于FPGA的FIR数字滤波器设计

clear;close all fc=1/4;fs=5/16; %输入给定指标 Rp=3;As=60;Fs=2; f=[fc,fs];m=[1,0]; %计算remezord函数所需参数f,m,dev dev=[(10^(Rp/20)-1)/(10^(Rp/20)+1),10^(-As/20)]; [N,fo,mo,W]=remezord(f,m,dev,Fs); %确定remez函数所需参数 hn=remez(N,fo,mo,W);...

FPGA/MATLAB学习教程/源码/项目合作开发 9454

HDOJ1465

 不容易系列之一Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 556    Accepted Submission(s): 219Problem Description大家常常感慨,要做好一件事情真的不容易,确实,失败比成

童戏兔腾的专栏 1928

OData V2 消息在 SAP UI5 中的生成、传播与治理全解

SAP UI5 的 OData V2 消息机制通过自动解析服务端响应头(sap-message)或错误体,将消息推送到全局 MessageModel,实现数据质量保障。关键点包括:1)消息通过目标路径与控件绑定联动,触发高亮等反馈;2)生命周期管理需注意避免自动刷新导致消息丢失;3)常见陷阱如批处理错误重复、内外层消息冲突等可通过精准目标路径或自定义处理器解决。代码示例展示了如何配置模型、消息模型及 MessagePopover 实现端到端消息展示,同时支持控件通过 refreshDataState 自定义

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 231

LVGL iPhone Duo 开合过渡

环境:LVGL 9.x(需要软件模糊),窗口建议 1280×800。界面文案英文(默认 Montserrat 无 CJK)。

摸鱼专家 149

2018icpc焦作赛区网络预选赛 L Poor God Water(矩阵快速幂)

2018icpc焦作赛区 L Poor God Water(矩阵快速幂) 题意: 现在有长度为n的方格,每个方格只能放鱼,肉,巧克力,并且连续三个方格要满足以下条件: 1.三个方格不能是同一种食物 2.巧克力放中间时左右两个方格的食物必须相同 3.三个方格的最左和最右不能同时为巧克力 题解: 当前格子只与前面两个各自有关,然后枚举递推,直接9*9的矩阵快速幂即可。 比赛的时候把递推...

Dyswan的博客 290

【数据集】全球湿度数据集总结

【数据集】全球湿度数据集总结

WW、forever的博客 1661

矩阵快速幂 ACM-ICPC 2018 焦作赛区网络预赛 L. Poor God Water

引用某位大佬的语句 固定由一些项推出一些项的多维递推可以考虑矩阵快速幂。 这道题,由n-1的好多项,推出n的好多项,所以考虑矩阵快速幂。 而类似于斐波那契数列等应用也可以用矩阵快速幂 模板: const int N=10; int n,mod; int temp[N][N]; int res[N][N],a[N][N]; void mul(int a[][N],int b[][N])//矩阵乘法 ...

qq_42882717的博客 202

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ACM-ICPC 2018 焦作赛区网络预赛 L Poor God Water 矩阵快速幂

Poor God Water  1000ms  65536K God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him that some sequence of eating will make them poisonous. Every hour, ...

OtterVのrecorder 653

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ACM-ICPC 2018 焦作赛区网络预赛 L Poor God Water 线性模板题 or 矩阵快速幂推导

博客目录 原题 原题传送门  40.26%  1000ms  65536K God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him that some sequence of eating will make them poisonous. Ev...

GreyBtfly的博客 289

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ACM-ICPC 2018 焦作赛区网络预赛L. Poor God Water(矩阵快速幂)

L. Poor God Water //您们的杜教BM模板。不知道会不会被我们查重全部卡下去。重复率都是百分百。 //但是真好用 //真香 #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;cmath&gt; #include &lt;algorithm&gt; #include &lt;vector&gt; #i...

辞树 301

ACM-ICPC 2018 焦作赛区网络预赛- L:Poor God Water(BM模板/矩阵快速幂)

God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him that some sequence of eating will make them poisonous. Every hour, God Water will eat one kind of fo...

执念 271

ACM-ICPC 2018 焦作赛区网络预赛 L Poor God Water(矩阵快速幂,BM)

https://nanti.jisuanke.com/t/31721 题意 有肉,鱼,巧克力三种食物,有几种禁忌,对于连续的三个食物:1.这三个食物不能都相同;2.若三种食物都有的情况,巧克力不能在中间;3.如果两边是巧克力,中间不能是肉或鱼。求方案数。 分析 将meat , chocolate,fish 用 0 ,1 , 2 表示。 对于 n 来说,我们只关注后两位,因为 若 n -...

weixin_33928137的博客 151

ACM-ICPC 2018 焦作赛区网络预赛 L:Poor God Water(矩阵快速幂)

God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him that some sequence of eating will make them poisonous.Every hour, God Water will eat one kind of food...

weixin_30381793的博客 81

L. Poor God Water(ACM-ICPC 2018 焦作赛区网络预赛,ac自动机+矩阵快速幂 或 BM线性递推)

描述 God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him that some sequence of eating will make them poisonous. Every hour, God Water will eat one kind of...

riba2534的博客 683

计蒜客 31721- ACM-ICPC 2018 焦作赛区网络预赛 - L. Poor God Water - 矩阵快速幂

题目链接:https://nanti.jisuanke.com/t/31721 题意:有鱼,肉,巧克力三种食物,有N个小时,现在要求每小时吃一种食物,而且下边的吃法不合法: 续三小时吃一种食物 连续三小时三种食物都吃并且中间吃的巧克力 连续三小时,两边吃巧克力,中间吃了鱼或者肉 问N小时内共有几种吃法。 解析:假设鱼,巧克力,肉分别用字符X,Y,Z表示,那么合法的长度为N的字符串的组成方...

Orz 527

计蒜客ACM-ICPC 2018 焦作赛区网络预赛 L. Poor God Water(BM/矩阵快速幂)

通过本题,学到了一个非常NB的黑科技,杜教BM线性递推模板 直接打表打出前几项,丢入BM模板就过了,非常神奇,非常强大 网上说BM板子一般8个以上就稳了,赛后试了一下,这个题要丢入前10个数据才能AC。 #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;cmath&gt; #include &lt;algorit...

hxxjxw的博客 382

[ACM-ICPC 2018 焦作赛区网络预赛][L.Poor God Water][AC自动机(伪)+矩阵快速幂]

题意 T组数据,构造长度为的串,不含字串的方案数 数据范围: 分析 AC自动机构造矩阵,但我不会(目前)_(°:з」∠)_ 可以将合法的三元串xyz看作xy-&gt;yz,这就形成了一个转移关系那么11-&gt;11就是非法的,13-&gt;32也是非法的 这就可以填充一个的矩阵,中元素表示从i转移到j的合法种数,所有元素和即为答案。 PS:比赛时丢脸的用trie树手写了一个的矩阵(...

Hardict的算法日记 332

【ACM-ICPC 2018 焦作赛区网络预赛】L. Poor God Water ---- 矩阵快速幂 or 杜教BM算法

题目传送门 做法: 我们设(肉,鱼,巧) —&amp;amp;gt; (0,1,2) f(i,j,k) i表示第i小时,j表示当前状态,k表示上一状态 j,k ∈\in∈ (0,1,2) 从n = 3 开始,我们利用后两项推前一项可得 f(i,0,0)=f(i−1,0,1)+f(i−1,0,2)f(i,0,0)= f(i-1,0,1) + f(i-1,0,2)f(i,0,0)=f(i−1,0,1)+f(i...

WangMeow --- ᶘ ᵒᴥᵒᶅ ฅ^•ﻌ•^ฅ 308

ACM-ICPC 2018 焦作赛区网络预赛-L- Poor God Water

God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him that some sequence of eating will make them poisonous. Every hour, God Water will eat one kind of fo...

随风而行的博客 262
上一篇: 洛谷 - P3810 【模板】三维偏序(陌上花开)
下一篇: AtCoder Grand Contest 027 - C ABland Yard (拓扑排序)
Mr_Treeeee
博客等级 码龄10年 38粉丝 551原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值