【arc068F】Solitaire

solitaire纸牌游戏 单人纸牌游戏,牌桌上有7个堆共28张牌,第一堆1张牌,第二堆2张,。。。第7堆7张,每一堆的第一张牌朝上,其他朝下。牌桌上还有4个suitpiles,一个deck card堆和一个discard card堆,布局如下(参考windows的纸牌游戏) 立即下载

题目大意

有一个队列,头尾都可以进出。
首先将n个数1~n从小到大扔进队列,然后将一次弹出队列,求最后弹出来的排列中,第k个数为1的排列有多少种。

解题思路

我们来考虑一下一个合法排列的性质,

第k个数是1
前k-1个数是可以拆成一个或两个单调递减的序列。
前k-1个数中其中一个序列的最小值一定大于后n-k个数中的最大值。

考虑如何来满足这个构造出这个排列。
先考虑后n-k-1个数,发现,这些数一定是有一个单调的队列,每次弹出头或尾来构成的,只要我们确定前k-1个数,就可以得出这个单调的队列能构成的后n-k-1个数的方案,就是2n−k−12n−k−1。
然后,如何确定前k-1个数,且保证第2条性质呢?
设f[i][j]表示,前k-1个数中,已确定了i个数,在确定的i个数中,最小值为j。
假定第一个单调序列是弹出1个一遍,那么第二个单调序列就要满足第3个性质。
每次新加一个数,如果加进第一个单调序列,显然加入的数就要小于j
于是f[i][j]->f[i+1][k] (j>k)
如果如果加进第二个单调序列,显然加入的数就要是当前没加的数中最大的,只有这样才能满足第3条性质。
于是f[i][j]->f[i+1][j]。
注意一下边界。

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>
#include <bitset>
#include <set>
const int maxlongint=2147483647;
const long long mo=1e9+7;   
const int N=3005;
using namespace std;
int n,k;
long long ans,mi[N],f[N][N];
int main()
{
    scanf("%d%d",&n,&k);
    mi[0]=1;
    for(int i=1;i<=n;i++) mi[i]=mi[i-1]*2%mo;
    for(int i=n;i>=2;i--) f[1][i]=1;
    for(int i=1;i<k-1;i++)
    {
        long long sum=f[i][n-i+1];
        for(int j=n-i;j>=2;j--)
        {
            sum=(sum+f[i][j])%mo;
            f[i+1][j]=(f[i+1][j]+sum)%mo;
        }
    }
    for(int j=2;j<=n-k+2;j++) ans=(ans+f[k-1][j])%mo;
    if(k==1) ans=1;
    if(n-1-k<0) printf("%lld",ans);
    else
        printf("%lld",ans*mi[n-1-k]%mo);
}
Chatbox使用指南 阅读详情

相关推荐

本地部署 Anything LLM+Ollama+DeepSeek R1 大模型并实现外部访问

DeepSeek 一经发布就引起社会的广泛的关注,因为 DeepSeek 的价格低廉,性能卓越,提供了多种使用方式,满足不同用户的需求和场景。本文将详细的介绍如何在本地 Windows 上安装部署 Anything LLM + Ollama 来实现用户和 DeepSeek-r1 对话的功能以及利用路由侠内网穿透实现外网访问。

lyxnwct的博客 1898

【ARC068F】Solitaire(dp,计数,思维)

首先发现那个双端队列一定长这样: 也就是说,这个队列中的数先单调递减,然后再单调递增,最小值为 111。 现在考虑从双端队列中取数,那么当我们取到 111 这个数时,我们会在原来的双端队列中取到类似这样的两个数列:(分别用红、蓝表示) 那么红、蓝两数列的总长度为 kkk,剩下的就是绿色的一段,长度为 n−kn-kn−k,我们每次可以从两端任意取,共取 n−k−1n-k-1n−k−1 次,方案数为 2n−k−12^{n-k-1}2n−k−1。 所以我们只用考虑前 kkk 个数的取法,然后乘上 2n−k−1

ez_lcw的博客 300

SAP-HR 模块 PPOSE 的详细信息标签页增强

步骤1:T-CODE : SE11 创建一个名为 HRI9106 的结构 命名:HRI + 91 + 两位数字。人事管理 - 组织管理 - 集成新信息类型 - 将信息类型添加为明细范围中的标签页。步骤6:SE51 查看 7000屏幕,修改屏幕属性 让其更美观。步骤3:T-CODE : SM30维护 T777I 表。步骤5:PPCI 新建 7000屏幕用于显示。标签页 IT 开头 + 信息类型 9106。步骤2:T-CODE : PPCI。步骤4:T-CODE : SPRO。

常回来看看呀!! 1628

[arc068f]Solitaire

题目大意将1-n顺序加入双端队列(每次可加头可加尾),再删除(每次可删头可删尾),求有多少种删除序列,使得1是第k个被删的。做法考虑什么样的删除序列存在对应的加入序列且合法。 1、第k个是1。 2、前k个元素能拆分成两个单调下降序列。 3、第k个后的元素每个位置都大于等于后缀最大值或小于等于后缀最小值。 4、前k个元素拆分出的单调下降序列其中一个的最小值大于等于第k个后的元素的最大值。 这

不来也不去的一只失忆蝴蝶 1192

冷源法测试噪声系数(Noise Figure)详细步骤

背景知识 电阻负载的功率谱密度 噪声等效模型 3 4 冷源法测试步骤 注意事项

eleday的电子世界 6871

Sen+MK趋势分析

Sen+MK趋势分析

地理研究与算法的博客 4万+

ARC068F Solitaire

ARC068F Solitaire

OAA___的博客 737

C#.NET斗地主服务端核心架构与高性能实现

斗地主作为典型的实时对战棋牌逻辑,本质是状态驱动的分布式协同问题。其技术内核涵盖有限状态机建模、低延迟网络同步、无GC内存操作与轻量级AI决策等关键能力。在.NET平台下,借助Span<T>、ImmutableArray、命令/事件总线与内存池等特性,可构建出高吞吐(200+ QPS)、低延迟(<150ms)、强一致的可落地服务端。本文聚焦C#.NET生态中斗地主核心模块的设计取舍与压测验证,深入解析状态机驱动、CardSet结构体优化、Kestrel中间件锁、规则+概率混合AI等实战方案,为实时对战类业务

weixin_29726381的博客 345

面向对象实验——solitaire纸牌游戏

项目地址 https://github.com/ccclll777/Windows_Solitaire_game 如果有帮助可以点个star 实验内容 使用java/C++语言,利用面向对象技术,模拟windows纸牌小游戏。 单人纸牌游戏,牌桌上有7个堆共28张牌,第一堆1张牌,第二堆2张,。。。第7堆7张,每一堆的第一张牌朝上,其他朝下。牌桌上还有4个suitpiles,一个deck card...

baidu_41871794的博客 6884

059、肤色还原专项调优:记忆色、颜色偏好建模与主观评价标准

文章摘要:肤色还原调优的技术挑战与实践经验 本文系统探讨了手机影像中肤色还原的技术难点与解决方案。通过实际案例揭示了肤色还原的本质是记忆色与颜色偏好的博弈,而非单纯的技术指标达标。文章详细分析了记忆色的三大特性(高饱和、地域差异、场景依赖)和颜色偏好的数学建模方法,提出了基于YCbCr/Lab空间的参数化模型和代价函数设计。在评价体系方面,强调主观评价的重要性,并分享了专家评审、用户调研、场景覆盖的三级验证方法。最后总结了实战中的关键经验,包括肤色检测优化、过渡处理、动态范围管理及视频/拍照差异策略。文章指

sundong_81的博客 250

【数据集】基于ubESTARFM法的100m 地温LST数据集(澳大利亚)

【数据集】基于ubESTARFM法的100m 地温LST数据集(澳大利亚)

WW、forever的博客 265

Solitaire题目地址链接(https://acs.jxnu.edu.cn/problem/NOIOPJCH0205200)

描述: Solitaire is a game played on a chessboard 8x8. The rows and columns of the chessboard are numbered from 1 to 8, from the top to the bottom and from left to right respectively.There are four identical pieces on the board. In one move it is allowed to:

R_xin_的博客 226

2024年软考信息安全工程师备考历年真题汇总

信息安全工程师分属“信息系统”专业,位处中级资格,2016年下半年,第一次开考信息安全工程师(中级)考试。目前每年考试一次。已开考六次,2016年11月12日,2017年5月20日,2018年5月26日,2019年5月25日,2020年11月7日,2021年11月6日为第六次考试。 第五次和第六次考试,采用第二版教材。 2024年软考信息安全工程师备考历年真题汇总

月梦工作室 5104

[ARC068F] Solitaire [DP]

题面 传送门 思路 单调性 首先,显然可以发现这些数在放进双端队列之后肯定是一个$V$形的排布:1在最中间,两边的数都是单调递增 那么我们拿出来的数,显然也可以划分成2个单调递减的子序列(因为我们也是从两边往中间取的) 我们令这两个单调递减的子序列的最小值分别为$p$和$q$,其中$p<q$ 那么,有一个结论:任意的的还没有被选取的数$k<q$,证明就是用上面的单调递减理论。...

139

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【ARC068F】Solitaire

Description    ​   你有一个双端队列和 \(N\) 个数字,先按 \(1\) 到 \(N\) 的顺序每次从任意一端插入当前数字,再进行 \(N\) 次操作每次可以从两端弹出,求有多少种弹出序列满足第 \(K\) 位为 \(1\)      ​ \(N \le 2000\)            Solution    ​   考虑双端队列的样子,插入完成后,元素大小形象来看一定是...

weixin_30237281的博客 105

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ARC 068 F Solitaire - dp

考虑翻译一下题面,就是说存在多少弹出序列,使得存在一种弹入序列能够构造出这个东西。 显然弹入序列是个v型。那我们的弹出序列如果前面k-1个位置可以被划分成不超过两个单调递减的序列并且其中一个单调队列的最小值大于后面n-k个数字的最大值,那么就可以,否则就不行。因此为了避免重复计数,我们规定对一个弹出序列构造弹入序列的方法是,如果下一个数字比当前加入的所有数字都小那么就放到地一个单调队列里面,否则...

Mys_C_K的博客 310

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【ARC068F】Solitaire 【动态规划】

题解 dp时倒序计算,可以顺便get到前缀和,还是很妙的。 #include&amp;lt;cstdio&amp;gt; #include&amp;lt;cstring&amp;gt; #include&amp;lt;cmath&amp;gt; #include&amp;lt;algorithm&amp;gt; using namespace std; const int mod=1000000007; int n,k,res,f[20

2016gdgzoi471 938

【做题】arc068_f-Solitaire——糊结论

把所有数字放入双端队列后,结果大概是这样一个排列: \[P_1 1 P_2\] 其中\(P_1\)是递减序列,\(P_2\)是递增序列。 我们以\(1\)所在的位置\(k\)分割最终的排列\(A\)。 其中前半部分,形象地讲是由两个递减序列交织在一起组成的。那两个递减序列分别是\(P_1\)的前缀和\(P_2\)的后缀,且至少有一个就是\(P_1\)(\(P_2\))本身。那么,前半部分满足这个性...

weixin_30822451的博客 186

AtCoder Regular Contest 068 F - Solitaire 动态规划

题意 一开始要把1到n从小到大放入一个双端队列,然后再逐个取出来。问取数序列中有多少个满足第k位恰好是1。 n&lt;=2000 分析 不难发现把n个数放进双端队列后会变成V字形,其中1恰好是中间点。既然1要恰好在第k个位置,那么前k个位置就可以被划分成两个单调下降序列,第k个位置以后的数都要满足小于两个序列其中一个的最小值。 考虑让每一个序列都和一个划分唯一对应,方法是能放第一个序...

beginend 764

AtCoder Regular Contest 068 F - Solitaire

题目也简称arc068f啦 http://www.elijahqi.win/2017/12/27/atcoder-regular-contest-068-f-solitaire/ F - SolitaireTime limit時間制限 : 2sec / Memory limitメモリ制限 : 256MB配点 : 1200 点 問題文すぬけくんは N 枚のカードとデック(両端キュー)で遊ぶことに

Elijahqi 844

ARC068 C Yet Another Die Game

http://www.elijahqi.win/archives/1896 Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement Snuke has decided to play with a six-sided die. Each of its six sides shows an ...

Elijahqi 332

Solitaire (dp)

睡了

Hacheylight 425

AtCoder Regular Contest 068

AtCoder Regular Contest 068 题目链接: https://arc068.contest.atcoder.jp/ C.X: Yet Another Die Game(结论题) D.Card Eater(结论题) E.Snuke Line(思路+主席树) 我们考虑怎样的区间内不含k的倍数,显然就是0,k,2k,3k,…m之间的区间,即[1,k-1],[k+1,2k-

Icefox的博客 520
上一篇: 51nod 1172 Partial Sums V2
下一篇: 【agc002d】Stamp Rally
无尽的蓝黄
博客等级 码龄11年 30粉丝 219原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值