首页 > 其他分享 >CSP模拟26

CSP模拟26

时间:2023-08-20 16:33:44浏览次数:35  
标签:26 ch int 染色 石子 模拟 include CSP dp

可做场,拜谢fengwu老师。

A. Reversi (AGC031B)

题目链接

一眼切了
设 $ dp_i $ 表示考虑到第 $ i$ 个石头的总方案数。
可由两种情况转移,不选择染色和选择染色,不染色直接由 $ dp_{i-1} $ 转移过来 ,染色由上一个和当前颜色相同的的石头转移过来,相当于把两个石子之间的染色。因为一个石子被染色后就不可以在给别的石子染色。
设 $ h_i $表示和当前石子颜色相同的最近的石子的位置。
则:

\[dp_i=dp_{i-1} + dp_{i-h[i]} \]

复杂度为 $ O(n) $

点击查看代码
#include <iostream>
#include <cstdio>
#include <vector> 

#define int long long 

const int MAXN=5e6+10;
const int mod=1e9+7; 

using namespace std;

inline int read() {
	int f=1,x=0;
	char ch=getchar();
	while(ch>'9' || ch<'0') {
		if(ch=='-') {
			f=-1;
		}
		ch=getchar();
	}
	while(ch>='0' && ch<='9') {
		x=(x<<3)+(x<<1)+ch-'0';
		ch=getchar();
	} 
	return f*x;
}

int n; 
int a[MAXN];
int cnt[MAXN], beh[MAXN];
int dp[MAXN];

signed main() {
	
	n=read();
	for(int i=1;i<=n;i++) {
		a[i]=read();
		beh[i]=cnt[a[i]];
		cnt[a[i]]=i;
	}
	
	dp[0]=0, dp[1]=1;
	for(int i=2;i<=n;i++) {
		dp[i]=dp[i-1]%mod;
		if(beh[i]+1==i) continue;
		dp[i]=(dp[i]+dp[beh[i]])%mod;
	}
	
	printf("%lld",dp[n]%mod);
	
	return 0;
} 

标签:26,ch,int,染色,石子,模拟,include,CSP,dp
From: https://www.cnblogs.com/cwymp/p/17644203.html

相关文章

  • 「C」2022/10/26晚学习总结
    2022/10/26晚学习总结主要内容范围:教材23章今晚浅学了一点点东西,记录一下.fma函数在math.h里,浮点数乘加,比自己手动算精度高.doublefma(doublex,doubley,doublez);返回值:x*y+zmemcpy函数在string.h里,内存复制,他和strcpy的区别是,他不仅仅能复制字符......
  • CSP模拟赛题解
    目录CSP模拟16T1:糖果CSP模拟17T1:弹珠游戏T2:晚会CSP模拟18T1:TheThirdLetterT2:InaoftheMountainCSP模拟19T1:StrangeFunctionT2:DZYLovesModificationCSP模拟21T1:[CEOI2016]kangarooT2:[JOI2023Final]Advertisement2T3:YourCSP模拟22T1:TheChildandToyCSP模拟16T1:......
  • FEMU模拟器学习笔记
     QEMU参数解析  QEMU的main函数进来后,首先要进行参数解析。一个启动模拟器的命令行如下:x86_64-softmmu/qemu-system-x86_64-name"FEMU-ZNSSD-VM"-enable-kvm-cpuhost-smp2-m4G-devicevirtio-scsi-pci,id=scsi0-devicescsi-hd,drive=hd0-drivefile=/home......
  • 【刷题笔记】26. Remove Duplicates from Sorted Array
    题目Givenasortedarraynums,removetheduplicatesin-placesuchthateachelementappearonlyonceandreturnthenewlength.Donotallocateextraspaceforanotherarray,youmustdothisbymodifyingtheinputarrayin-placewithO(1)extramemory.E......
  • [HZOJ普及模拟2]
    \(\Huge\color{7ff77f}{打了一场模拟赛,又垫底了。qwq}\)\(\Huge\color{12f4ff}{快}\)\(\Huge\color{f9f98f}{V}\)\(\Huge\color{ff1256}{本}\)\(\Huge\color{ff4514}{蒟}\)\(\Huge\color{7ffff7}{蒻}\)\(\Huge\color{3f3f3f}{5}\)\(\Huge\color{f54321......
  • CSP模拟25
    炒币、凑数、同构、最近公共祖先A.炒币举个栗子,对于序列\[1,4,5\]在\(1\)处买进,在\(5\)处卖出是最优的选择。为什么不选择在\(4\)处买,因为\(4\)处成本更高,所以我们可以把一段递增或递减的序列缩成几个互不相同的点。例如\[1,3,5,3,2,7\]变成\[5,2,7\]只有这......
  • 普及模拟2 +【LGR-155-Div.3】洛谷基础赛 #3 &「NnOI」Round 2
    普及模拟2\(T1\)地址\(0pts\)简化题意:判断一个\(IP\)地址是否合法(数据保证字符串中存在且仅存在4个被字符分开的整数)#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#definesortstable_sort#defineendl'\n'chars[100];intmain(){ freope......
  • python模拟用户pa取
    使用Selenium模拟用户爬取页面内容,并输出成文件。关于Selenium是什么,欢迎看这篇文章:seleniumPython教程。在这里,我只讲我主要的实现。首先作为一款工具脚本,我们应该不喜欢窗口界面吧,除非你需要动态的观察程序的操作。所以,我开启了无头浏览器模式#无头浏览器chrome_options=webd......
  • python生成模拟数据
    python faker的使用Faker是一个Python包,开源的GITHUB项目,主要用来创建伪数据,使用Faker包,无需再手动生成或者手写随机数来生成数据,只需要调用Faker提供的方法,即可完成数据的生成安装pipinstallFaker使用fromfakerimportFakerfaker=Faker(locale='zh_CN')fromfakerimportF......
  • 8.19 模拟赛小结
    前言结束了也许这几天很苦但也是最有意义的几天这篇写简单一点吧T1颠倒黑白很强的构造题根据打表找出思路因为最左下角的是一定要点的就考虑它如果是先手左下角有黑色就把它点了后手只能帮我们把其它黑色点了最后还是我们先点完若是后手左下角是白色与先手同......