首页 > 其他分享 >「模拟赛」暑期集训CSP提高模拟10(7.28)

「模拟赛」暑期集训CSP提高模拟10(7.28)

时间:2024-07-29 20:29:32浏览次数:6  
标签:bmatrix 10 cnt 7.28 int long ull 模拟

\(145pts,Rank 10\),众数分。

数学专题模拟赛%%%

总结写前面:

1. 线性递推式复杂度过大考虑矩阵快速幂优化;

2. T1 长时间切不了就先跳,先把所有题看一遍,拿分为主。

赛时记录

正常开 T1,期望数学题,大概读懂了,手模下小样例,模了一遍又一遍,“我并不认为样例是对的”,跳了(很正确的决定)。

T2,貌似也只会个 \(25pts\) 暴力,不过看起来挺可做的,先打了暴力,想着能不能找到规律,毕竟 \(n<=10^{18}\),好吧,并不可以。

T3,又是数学,推式子题,好熟悉的式子,莫比乌斯反演,不会...,\(O(n^2 \log n)\) 可以拿 \(10pts\) 暴力,额...思考,回忆关于莫比乌斯反演以及双西格玛后面挪到前面。

不小心发现小孩哥们在打水题比赛,报名了一下,哇,好水,用了两分钟切了 T1、T2,爽。诶, IOI 赛制的,看排行榜,E 题还没人 AC,拿个首 A 我就跑,打表 AC 完发现首 A 被抢了,气!他们还挺牛,现在就剩 C 题没人 A 了,看 C 题,牛棚回声,这我熟悉啊,三分钟 A 了,发现首 A 又有人抢了!诶,不过怎么 Rank 1 了,感觉大事不妙,不会被发现吧,溜了溜了。

大概两分钟之后,huge:(叫我名)过来。

走过去,看见 Delov 学长在旁边,芭比Q,猜到是被发现了,被 D 了一顿。然后回来乖乖打比赛坐牢

打了 T3 暴力,真不会了,开 T4 看看吧,!!不是,原来签到题放 T4 了,迅速切了,然后由于这一场就会这一题,万一再挂就祭了,于是打了个暴力跑对拍,十分钟没拍到 WA 的点,放心了。

回去看了下小孩哥模拟赛的排行榜,发现自己成绩被取消了,刷新一下,比赛页面也看不见了。。。

之后就是在 T1 模样例仍然觉得样例不对,T2 想各种可能做法,T3 使劲回忆、卡常 之间来回跳,三道题正解都无果,不过 T3 记忆化一下,发现可以优化到 \(O(n^2)\),\(20pts\) 了,再度卡常,把四个 if 判断换成了三目运算符,(一句话里面套了五六对括号)。现在 \(145pts\) 了,剩下时间,一直坐牢了?。

我也完结撒花?


B.速度型高松灯 \(25pts\)

矩阵快速幂?,还真不会这个了,矩阵乘?,咋用啊,学过我记得,但学啥了呀。不是,矩阵乘法为啥这样乘啊......

哎,填坑 ing,看到之前提高组某一块的专题,好多都忘了,之前挖的坑现在果然还是要亲手填。

正解:

易得:\(f_i = 10 ^ k \times f_{i-1} + i\),很线性的一个递推式,但 \(n\) 过大,所以考虑拿矩阵快速幂优化。有下列矩阵转移:

\[ \begin{bmatrix} f_i & i+1 & 1 \end{bmatrix} = \begin{bmatrix} 10^k & 0 & 0 \\ 1 & 1 & 0 \\ 0 & 1 & 1 \end{bmatrix} \times \begin{bmatrix} f_{i-1} & i & 1 \end{bmatrix} \]

构造矩阵转移即可。

code:

#include <bits/stdc++.h>
typedef unsigned long long ull;
#define ull __int128
using namespace std;

const int N = 5;

long long n; int m;

struct matrix{
	int H, L; ull a[N][N];

	void zero(){
		memset(a, 0, sizeof a);
	}

	void one(){
		zero();
		for(int i=1; i<=H; i++) a[i][i] = 1;
	}
	
	void resize(int x, int y){
		H = x, L = y;
	}

	matrix operator * (const matrix &A) const{
		matrix res;
		res.zero(); res.resize(H, A.L);

		for(int i=1; i<=3; i++){
			for(int j=1; j<=3; j++){
				for(int k=1; k<=3; k++){
					res.a[i][j] = (res.a[i][j] + a[i][k] * A.a[k][j] % m) % m;
				}
			}
		}
		return res;
	}
}A;

matrix qpow(matrix X, ull b){
	matrix res;
	res.resize(X.H, X.L); res.one();

	while(b)
	{
		if(b & 1) res = res * X;
		X = X * X;
		b >>= 1;
	}
	return res;
}

ull Mont_Mary(ull x, ull b){
	ull a = x, res = 1;
	while(b)
	{
		if(b & 1) res = res * a;
		a = a * a;
		b >>= 1;
	}
	return res;
}

int main(){
	// freopen("in.in", "r", stdin); freopen("out.out", "w", stdout);
	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);

	cin>>n>>m;

	ull x = n; int cnt = 0;
	while(x) x /= 10, cnt++;

	A.resize(1, 3); A.a[1][2] = A.a[1][3] = 1, A.a[1][1] = 0;

	matrix base; base.resize(3, 3);

	ull num = 9;
	for(int i=0; i<cnt; i++){
		ull k = num / 9 * 10;

		base.one(); base.a[2][1] = base.a[3][2] = 1, base.a[1][1] = k;
		if(i == cnt - 1) break;

		A = A * qpow(base, num);
		num *= 10;
	}

	 A = A * qpow(base, n - Mont_Mary(10, cnt-1) + 1);

	int ans = A.a[1][1];
	cout<<ans;


	return 0;
}

C.力量型高松灯 \(20pts\)

听说这是学长让我们学习莫反的把戏,不赞同 但确实有效果

正解:

我并不想写这个式子过了


D.高松灯 \(100pts\)

水题放最后,差点进坑,本来打到 T3 我可能就要耗死了,还好看了眼 T4。

正解:

两种情况,一个是数自己,一个是首位数 \(-1\),其他位全都为 \(9\)。

code:

#include<bits/stdc++.h>
#define int long long
using namespace std;

const int mod = 998244353;

int n;
int num[20];

signed main(){
    // freopen("in.in", "r", stdin); freopen("out.out", "w", stdout);
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);

    cin>>n;
    int x = n, cnt = 0, sum = 0;
    while(x)
    {
        num[++cnt] = x % 10;
        sum += num[cnt];
        x /= 10;
    }

    int s = (cnt - 1) * 9 + num[cnt] - 1;
    cout<<max(s, sum);

   
    return 0;
}

标签:bmatrix,10,cnt,7.28,int,long,ull,模拟
From: https://www.cnblogs.com/YuenYouth/p/18328918

相关文章

  • LeetCode - #107 二叉树的层序遍历 II
    文章目录前言1.描述2.示例3.答案关于我们前言我们社区陆续会将顾毅(Netflix增长黑客,《iOS面试之道》作者,ACE职业健身教练。)的Swift算法题题解整理为文字版以方便大家学习与阅读。LeetCode算法到目前我们已经更新到105期,我们会保持更新时间和进度(周一、......
  • 暑假集训csp提高模拟11
    赛时rank9,T1100,T2100,T30,T40update:赛后T1被hack了,成了99,死因没有记忆化挂成了rank10我又要挂分了。T3暴力挂了?话说jjdw和k8啥时候回来。T1Fate签到题,最短路板子。考虑一个点\(a\),其最短路前驱节点为\(b\),前驱结点组成的集合为\(B\),其次短路的前驱节点为......
  • 暑假集训CSP提高模拟11
    A.Fate求次短路方案数.这题有点小水了,好像之前做过.具体的方案显然是DP,考虑枚举当前每一个路径长度,假如比最短路更优则覆盖最短路,之前的最短路用来覆盖次短路.否则如果比次短路更优,则直接覆盖次短路.方案数的话考虑一样的方法维护,只是在遇到相等的路径长时使方案数加一即可.......
  • 暑假集训CSP提高模拟11
    暑假集训CSP提高模拟11组题人:@KafuuChinocpp\(T1\)P152.Fate\(24pts\)强化版:HDU1688Sightseeing设\(dis_{i,0/1}\)表示从\(s\)到\(i\)的最短路/次短路长度,\(f_{i,0/1}\)表示从\(s\)到\(i\)的最短路/次短路条数。\(dijkstra\)过程中按照路径长度与......
  • 『模拟赛』暑假集训CSP提高模拟11
    Rank昨天积攒的rp生效了!A.Fate签到题。次短路计数,感觉做过类似的,不过这里次短路定义为最短路长度+1,赛时把自环想成环了,原谅我犯唐。还是用dijkstra,我们这次开两个dis数组存最短路和次短路长度,然后两个cnt数组存二者的个数,稍微想想就能想到一共的四种可能:更新后......
  • 模拟冲刺(Sprint)
    用户地图  模拟冲刺Sprint队伍与选手信息展示用户故事:作为赛事观众或参赛者,我能够通过网页查看所有队伍及其选手的详细信息。任务拆分与开发时间设计队伍与选手的数据模型,并在后端数据库中创建相应表格。-6h实现后端API接口,用于获取队伍与选手信息。-8h设计并实现前端......
  • 推出LP5810系列具有 I2C 和自动动画控制功能的 4 通道 RGBW LED 驱动器,适用于便携式和
    说明LP5810是一款具有自主动画引擎控制功能的4通道RGBWLED驱动器。该器件在点亮LED时具有0.4mA(典型值)的超低正常工作电流。该器件采用模拟调光和PWM调光两种方法实现强大的调光性能。每个LED的输出电流可在0.1mA至25.5mA或0.2mA至51mA之间以256个阶跃进......
  • 周报 | 24.7.22-24.7.28文章汇总
    为了更好地整理文章和发表接下来的文章,以后每周都汇总一份周报。周报|24.7.15-24.7.21文章汇总-CSDN博客集智书童|超级干货|用万字文章总结25种正则化方法(值得收藏)-CSDN博客kaggle竞赛宝典|时序表示学习的综述!_时间序列预测kaggle-CSDN博客小白学视觉|漫谈图神......
  • 《DNK210使用指南 -CanMV版 V1.0》第十五章 按键中断实验
    第十五章按键中断实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正点原......
  • P10800 [CZOI-R1] 卡牌
    题意每张卡牌有四个属性,我们称一张卡牌能胜过另一张卡牌,当且仅当其至少有三个属性都大于另一张卡牌。Bob拥有\(m\)张卡牌,而Alice拥有每个属性值在\([1,n]\)的所有\(n^4\)张卡牌。现在Alice想知道:她有多少张卡牌可以胜过所有Bob的卡牌?思路乍一看是巨大多数高维数......