首页 > 其他分享 >AT_abc195_e 题解

AT_abc195_e 题解

时间:2024-10-25 16:10:16浏览次数:4  
标签:Aoki 10 int 题解 abc195 必胜 dp Takahashi

思路

这道题需要倒序计算。

定义 $dp_{i,j}=f$ 表示第 $i$ 轮结束后余数为 $j$ ,$f=1$ 时, Takahashi 必胜,否则 Aoki 必胜。

动态转移方程式

令:

$x=dp_{i,(j \times 10 + a_i)\bmod 7}$

$y=dp_{i,j \times 10 \bmod 7}$

$dp_{i-1,j}=\begin{cases}x\ \operatorname{or}\ y&b_i=T\x\ \operatorname{and}\ y&b_i=A\end{cases}$

$x$ 为选 $a_i$ 的余数, $y$ 为不选 $a_i$ 的余数。

如果当前是 Takahashi 选,那只要两个中有一个能让 Takahashi 必胜就行。

如果当前是 Aoki 选,那需要两个都能让 Takahashi 必胜才能使 Takahashi 必胜,否则当前情况 Aoki 必胜。

代码

#include <bits/stdc++.h>
using namespace std;
long long n,dp[200010][10];
string a,b;
int main(){
	cin>>n;
	cin>>a>>b; 
	a=" "+a;
	b=" "+b;
	memset(dp,0,sizeof dp);
	dp[n][0]=1;
	for(int i=n;i>=1;i--)
		for(int j=0;j<7;j++){
			bool x=dp[i][(j*10+a[i]-'0')%7];
			bool y=dp[i][j*10%7];
			if(b[i]=='T')
				dp[i-1][j]=x|y;
			else
				dp[i-1][j]=x&y;
		}
	cout<<(dp[0][0]==0?"Aoki":"Takahashi")<<endl;
	return 0;
} 

标签:Aoki,10,int,题解,abc195,必胜,dp,Takahashi
From: https://www.cnblogs.com/zla2012/p/18502785

相关文章

  • 乒乓球题解()
    30pts考场上看到这个题时,第一反应就是全部展开man慢算诶,刚好有30分部分分可以\(O(n)\)维护那么使用\(tot\)来记录遍历到哪一位了,当\(tot\)遍历到结尾时直接让他归0即可点击查看代码#include<bits/stdc++.h>usingnamespacestd;intn,len,tot,a,b,A,B;chart[10010......
  • ♿交换序列题解♿
    以下将状态\(K\),\(E\),\(Y\)用数字0,1,2表示。考虑\(dp\)我们设\(dp[a][b][c][d]\)表示\(K\)用了\(a\)次,\(E\)用了\(b\)次,\(Y\)用了\(c\)次,总共交换了\(d\)次,前缀和$sum[i][j]$表示到第\(j\)位有几个字母\(i\)记录一个\(loc[i][j]\)表示第\(j\)个字......
  • 序列题解
    哈哈哈我也有个唐氏做法也是考虑一个朴素dp,设\(dp_{i}\)表示以\(i\)结尾的字串最长是多少,则容易想到若\(a_{i-1}\)和\(a_i\)是等比数列的一部分就一定能从\(dp_{i-1}\)转移到\(dp_i\),证明最后讲那么如何判断\(a_{i-1}\)和\(a_i\)是否为等比数列的一部分呢?首先......
  • 最长的Y题解
    考虑将Y单独拎出来,用数组存储他的下标,那么将第\(x\)个Y转移至第\(y\)个Y就需要\(a[x]-b[y]-1\)次操作。发现一个问题:第一次从左移动至\(y\)需要减1,第二次从左移动需要减2……如图:这似乎是一个很麻烦的问题,我们的某知名\(lyh\)教授是通过指针(应该是吧)解决的。......
  • 家谱树题解
    (ACM比赛时忘了拓扑怎么写时代尻古)假设有一个DAG图,那么如何写出它的拓扑排序呢?这里说一种比较常用的方法:1.从DAG图中选择一个没有前驱(即入度为0)的顶点并输出。2.从图中删除该顶点和所有以它为起点的有向边。3.重复1和2直到当前的DAG图为空或当前图中不存在无前驱的......
  • SSL证书常见问题解答
    在当今的数字时代,确保网站和数据的安全性变得尤为重要。SSL(SecureSocketsLayer)证书作为保障网站安全的关键组件,广泛应用于各种在线服务中。然而,在SSL证书的申请、安装和使用过程中,用户常常会遇到各种问题。本文旨在提供一个全面的指南,帮助用户理解并解决SSL证书的常见问题。......
  • 题解:CF722D Generating Sets
    涉及知识点:set。解题思路每次让列表中最大的元素缩小两倍,保证答案最优。如果当前的元素缩小成$0$就直接跳出循环,输出这个序列。由于序列需要支持插入、删除以及找最大值,所以这个序列可以用set来维护。代码#include<bits/stdc++.h>#defineintlonglong#definell......
  • 题解:P10298 [CCC 2024 S4] Painting Roads
    涉及知识点:图的遍历。我们观察样例可以发现,染色之后的图是一颗树,而且还是dfs树。题目要求所以路径上的颜色都是交替的,所以直接交替染色即可。注意:建图的时候需要记录当前边的编号。代码#include<bits/stdc++.h>#defineintlonglong#definell__int128#definedbd......
  • 题解:SP25334 NPC2015A - Eefun Guessing Words
    涉及知识点:字符串处理。解题思路记录每个字符出现的第$1$个位置和最后$1$个位置,询问时比较大小即可。代码#include<bits/stdc++.h>//#defineintlonglong#definell__int128#definedbdouble#defineldblongdouble#definevovoid#defineendl'\n'#defin......
  • 题解:CF1988B Make Majority
    题目大意题面写得很清楚,我就不再赘述了。解题思路涉及知识点:字符串,构造。由于所有相邻的$0$合并完会变成一个$0$,所以先贪心地把所有挨在一起的$0$合并起来,放在一个新的字符串里。而且题目需要你判断是否最终是否能合并成一个$1$,所以$1$是不需要想$0$一样合并的,这......