首页 > 其他分享 >AT_arc117_c [ARC117C] Tricolor Pyramid 题解

AT_arc117_c [ARC117C] Tricolor Pyramid 题解

时间:2024-02-27 20:00:37浏览次数:33  
标签:Pyramid 颜色 ARC117C int 题解 Tricolor col

题意

  • 给一个金字塔的底部颜色组成和生长规律,问顶部的颜色是什么。

分析

  • 试几次就可以很容易得到的一种构造:令颜色 B 为 \(0\),W 为 \(1\),R 为 \(2\)。设左右两个方块的颜色分别为 \(col_l\) 和 \(col_r\),则生长规则可以描述为 \(col_{now}\equiv-(col_l+col_r)\pmod 3\)。因为底部每一个元素有 \(C_{n-1}^{i-1}\) 种方式贡献到顶部元素上(一共要走 \(n-1\) 步,其中有 \(i-1\) 步是向左走,因此是 \(C_{n-1}^{i-1}\)),于是顶部元素颜色的表达式就出来了。

\[col_{top}\equiv(-1)^n\sum_1^n{C_{n-1}^{i-1}col_i}\pmod3 \]

  • 这里的 \(p\) 很小,因此组合数直接用 Lucas 求解即可。

代码

#include <bits/stdc++.h>
#define int long long
#define N 500005
using namespace std;
int n, a[N], ans;

inline int C(int n, int m) {
	if (n < m) return 0;
	int res = 1;
	for (int i = n - m + 1; i <= n; i++) res *= i;
	for (int i = 1; i <= m; i++) res /= i;
	return res % 3;
}

int Lucas(int n, int m) {
	if (m == 0) return 1;
	return Lucas(n / 3, m / 3) * C(n % 3, m % 3) % 3;
}

signed main() {
	scanf("%lld", &n);
	char ch = 0;
	while (ch < 'A' || ch > 'Z') ch = getchar();
	for (int i = 1; i <= n; i++) {
		if (ch == 'B') a[i] = 0;
		if (ch == 'W') a[i] = 1;
		if (ch == 'R') a[i] = 2;
		ch = getchar();
	}
	for (int i = 1; i <= n; i++) {
		ans += Lucas(n - 1, i - 1) * a[i] % 3;
		ans %= 3;
	}
	if ((n & 1) == 0) ans = (3 - ans) % 3;
	if (ans == 0) printf("B");
	if (ans == 1) printf("W");
	if (ans == 2) printf("R");
	return 0;
}

标签:Pyramid,颜色,ARC117C,int,题解,Tricolor,col
From: https://www.cnblogs.com/iloveoi/p/18037728

相关文章

  • P5605 小 A 与两位神仙 题解
    推销博客P5605小A与两位神仙题意给定\(x\)、\(y\)和\(m\),其中\(m=p^n,n\in\mathbb{N+},p\ge3\),问同余方程\(x^a\equivy\pmodm\)是否有非负整数解。分析前置芝士Pollard_rho原根化简对这种指数型的同余方程是很难解决的,我们要先把它转化成线性的同余方......
  • [ARC121B] RGB Matching 题解
    题意有\(2N\)个物品,每个物品有可爱度\(a_i\)和颜色\(c_i\),将其两两配对。假设物体\(i\)和\(j\)配对,则\(c_i\neqc_j\),则会增加\(|a_i-a_j|\)的不满意度,求最小的不满意度。分析这道题可以贪心解决。我们尽量让每一对物品颜色相同,令每种颜色的总个数为\(cnt_c\),......
  • AT_abc270_g [ABC270G] Sequence in mod P 题解
    [ABC270G]SequenceinmodP博客阅读可能体验更佳题意给出递推式如下,求最小的使\(X_i=G\)成立的\(i\)。\[X_i=\begin{cases}S&i=0\\(A\timesX_{i-1}+B)\bmodp&i\ge1\end{cases}\]分析这里分几种情况来分析:当\(A=0\)时,\(X_i\)要么等于\(S\),要么等于\(B\),直......
  • CF1928C Physical Education Lesson 题解
    洛谷传送门原题传送门题意一种上下波动的数组,给出所在的位置\(n\)和对应的数字\(x\),求出有几种数组满足条件。令\(k\)为最大值,则数组长成这样子:\[1,2,3,\cdots,k-1,k,k-1,k-2,\cdots,2,1,2,3,\cdots\]如图,每\(2(k-1)\)就循环一次。分析因为每\(2(k-1)\)......
  • CF1477A Nezzar and Board 题解
    题意给出数列\(S=\{a_i\}\)和整数\(k\),求是否能通过下面的操作使得\(k\inS\)?操作:选取\(x,y\inS\),将\(2x-y\)加入\(S\)中。分析观察操作可以发现,\(2x-y\)实际上就是数轴上\(y\)关于\(x\)的对称点,因此这个操作只与\(x\)和\(y\)在数轴上的相对位置有关,与......
  • [ABC342D] Square Pair 题解
    洛谷传送门原题传送门题意给出一个数列\(A\),求出满足\(A_iA_j\)为完全平方数的无序数对\((i,j)\)的个数。分析容易想到(但是我在昨晚没想到,可以原地AFO了),对于每个数,如果是\(0\)的话可以直接统计答案(记录\(0\)的个数\(cnt\),最后\(ans\leftarrowans+cnt(n-cnt)+\f......
  • [ABC342E] Last Train 题解
    洛谷传送门原题传送门题意给出一些由\((l,d,k,c,A,B)\)描述的列车,表示每当时间为\(l,l+d,l+2d,\cdots,l+(k-1)d\)时有一半列车从\(A\)出发,经过\(c\)的时间到达\(B\)。问如果从站点\(i,i\in(0,n)\)出发要去站点\(n\),最晚什么时候到达站点\(i\)可以去到站点\(n\)......
  • [ABC342C] Many Replacement 题解
    洛谷传送门原题传送门题意给出由小写字母初始字符串,每次操作将字符串中所有为\(c\)的字符改为\(d\)。输出最终的字符串。分析很明显只需要开一个\(fa\)数组,其中\(fa[i]=j\)表示字母\(i\)被改为了\(j\)。对于每次操作只需要遍历\(26\)个字母,将\(fa[i]=c\)的那些......
  • [ABC341E] Alternating String 题解
    题目传送门原题传送门题意给出长为\(n\)的01串,如果一个子串01交替出现,则称其为“好的”。有\(q\)次询问,把\([x,y]\)中的每一位反转或者询问\([x,y]\)是否是“好的”。分析一眼线段树。用线段树维护区间是否是“好的”,每个节点维护最左段和最右端的值,pushup和q......
  • [ABC342G] Retroactive Range Chmax 题解
    洛谷传送门原题传送门题意维护一个数列,有以下三个操作:区间最值操作,即将\([l,r]\)区间内的\(A_i\)变成\(\max(A_i,v)\)。删除操作操作,即将第\(i\)次操作删除,保证第\(i\)次操作是操作\(1\),且未被删除。注:仅删除第\(i\)次操作,后续操作仍然在。查询,询问当前的......