首页 > 其他分享 >CF1142D Foreigner题解

CF1142D Foreigner题解

时间:2023-10-09 20:11:34浏览次数:42  
标签:数字 bmod11 int 题解 CF1142D Foreigner 自动机 dp

CF1142D Foreigner题解

前言:

题目含义真的好难理解呜呜。

遇到的 dp 套 dp 的第三题,所以深入进行了理解。

参考博文:https://www.cnblogs.com/AWhiteWall/p/16479483.html

题意简化:

先定义了不充分。

  1. 首先数字 $[1,9]$ 都不充分,注意没有 $0$。
  2. 当这个数字(设为 $x$)大于等于 $10$ 时,我们将它拆成两部分,一部分是他的最后一位,我们设为 $c$,另一部分为去掉末尾后的数字,我们设其为 $y$,那么需要满足 $y$ 是不充分的,并且 $y$ 在所有不充分数中的大小排名 $Rank_y$ 满足 $c < Rank_y \bmod 11$。

很复杂吧,我也觉得,所以要不不做了吧……

题解思路:

就像游园会那一道题一样,对于 dp 套 dp 我们先思考要是有个神犇,你需要他帮你设计什么自动机?
似乎就是一个较为普通的自动机吧,甚至没有神犇你都可以建立出来。大概就是 $f(i-1,j)$ 转移到 $f(i,nxt(j,s_i))$,其中 $nxt$ 表示的是大小标号为 $i$ 的数字在后面加上数字 $j$ 所达到数字的大小标号。

现在考虑怎么计算题目所需的答案。可以考虑每“增加”一个字符,就统计所有最后一位为该字符的子串

对于这个自动机每一次转移需要满足 $s_i<j\bmod11$。

然后接着考虑内部的 $nxt$ 怎么求解,我们假设原来的数字排名为 $k$,加入的数字为 $c$,

那么答案是:

$9+\sum_{i=1}^{k-1}(i\bmod11)+c+1$。

由于数据范围较大,这个状态也很有可能有很多个,于是就会达到 $O(n^2)$ 级别的时间复杂度。

现在时间复杂度需要优化,不然就是在前面的枚举开头字符中减少,不然就是在自动机那里减少。

我们看到有个 $x\bmod11$ 这个操作,又发现标号 $i$ 变为 $i\bmod11$ 对于答案不会产生影响,于是我们就想到优化状态数。

那么此时内部的转移,我们稍微利用一下等差数列(当然也可以直接预处理),答案就是:

$(9+k(k-1)/2+c+1)\bmod11$。

然后直接两个套就好了。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int getnxt(int nowk,char c){
	int nowc=c-'0';
	return (9+((nowk*(nowk-1)/2)%11)+nowc+1)%11;
}
int f[100005][12];
signed main(){
	ios::sync_with_stdio(false);
	string s;
	cin >> s;
	int ans=0;
	
	int n=s.size();
	s=" "+s;
	for(int i=1;i<=n;i++){
		for(int j=s[i]-'0'+1;j<=10;j++){
			f[i][getnxt(j,s[i])]+=f[i-1][j];
		}
		if(s[i]>'0'){
			f[i][s[i]-'0']++;
		}
		for(int j=0;j<=10;j++){
			ans+=f[i][j];
		}
	}
	cout<<ans;
} 

标签:数字,bmod11,int,题解,CF1142D,Foreigner,自动机,dp
From: https://www.cnblogs.com/linghusama/p/17753036.html

相关文章

  • 题解 CF457F 【An easy problem about trees】
    尝试理解,感谢cz_xuyixuan的题解。算作是很多情况的补充说明。我们不妨先二分答案,将\(\gemid\)的设为\(1\),\(<mid\)的设为\(0\),于是问题转化为了权值均为\(0/1\)的版本。我们称一棵树的大小为其非叶节点数。我们称一棵大小为奇数的树为奇树,大小为偶数的树为偶树。对......
  • 题解 - CF1972E - Divisors and Table
    这题正解是虚树,本解法卡常,仅适合不会虚树的。(例如本人)注意:下文中根节点深度定义为1.第一步:转化问题我们把$g(x,y,z)$拆开,考虑每个质数是哪些点的因子。包含这个质数的点构成一个点集,我们只需求这个点集S的$\sum\limits_{x,y,z\inS}f(x,y,z)$。第二步:对......
  • P4801题解
    解题思路:确实是一道很好的贪心,但由于加上了水这个影响因素,使题目复杂度上升了不少。(考虑的东西多了嘛)输个入。对饼干温度无脑排序。求最小值。求最大值(用双指针做,后面会讲)。解题过程:先输入(这个步骤就不用我讲了)inta[1000005];longlongn,ws;longlongmin......
  • Codeforces Round 902 (Div. 2) (CF1877) B、C、D 题解
    B题目大意你要传话给\(n\)个人,每传一下话需要花费\(p\),当一个人被传话后,他可以最多传给\(a_i\)个人,每次花费\(b_i\)。问把话传给\(n\)个人的最小花费。分析首先传给第一个人只少要\(p\)下来贪心,每次让花费最小、且能够传话的人去传话。考虑建一个堆,堆内的信息是......
  • 题解 尼克的任务
    有一种和题解区完全不同的做法。首先将所有任务按照时间从小到大排序,接着用\(f_i\)表示处理前\(i\)个任务所能得到的最大空闲时间。回顾一下需要满足的条件:再某个有任务的时刻,如果尼克是空闲的,就必须从中选择一个任务做。那么我们对于第\(i\)个任务,枚举上一个做的任务\(j......
  • P7710 [Ynoi2077] stdmxeypz 题解
    P7710[Ynoi2077]stdmxeypz题解我的第一道Ynoi题,体验感不高,调了大半天,最后发现有个地方\(B_1\)写成\(B_2\)了。分析树上问题,明显是要转到树下的,所以DFS序是一定要求的。有关树上距离,所以\(deep\)数组也是一定要求的。所以我们现在把问题转化成了:给你三个序列\(......
  • 「Round C10 B」间隔 题解
    简要题意本题有\(T\)组数据。给定一个由\(n\)个元素构成的正整数数列\(a_1,a_2,a_3...a_{n-1},a_n\)。问至少需要插入多少个整数才能使得\(a\)的各相邻元素之差相等(不能插入在头尾)。\(a\)数列保证是单调不减的。\(1\len\le10^6,0\lea_i\le10^6,1\leT\le1......
  • DBeaver [安装/问题解决]
     DBeaverMac版软件简介DBeaverMac版是一款专门为开发人员和数据库管理员设计的免费开源通用数据库工具。软件的易用性是它的宗旨,是经过精心设计和开发的数据库管理工具。免费、跨平台、基于开源框架和允许各种扩展写作(插件)。下载地址......
  • 【题解】CodeForces-1874/1875
    CodeForces-1875AJellyfishandUndertale一定是等待降到\(1\)或者能补满到\(a\)时才使用工具,依题意模拟即可。提交记录:Submission-CodeForcesCodeForces-1874AJellyfishandGame这种题目有点思路但是不是很会。赛时第一发写得根据奇偶性判断,\(k\)为偶数错了,然后感......
  • AtCoder Beginner Contest 323 (ABC 323) D、E、F 题解
    AtCoderBeginnerContest323(ABC323)D、E、F题解D题目大意给\(n\)种数\(s_i\),每一种数有\(c_i\)个,每次可以把两个相同的数合并为一个数,问最后会剩下多少数?分析对于每一个数\(s_i\),它最多被分解\(log_2c_i\)次,并且合并出来最大的数的大小小于\(s_i\timesc_i......