首页 > 其他分享 >一道好玩的组合数学的推公式题(绿名题, 1879C - Make it Alternating

一道好玩的组合数学的推公式题(绿名题, 1879C - Make it Alternating

时间:2024-04-06 20:00:17浏览次数:19  
标签:Alternating 1879C res Make 绿名题 ++ ans ll

1879C - Make it Alternating

先贴代码,看能不能理解

str a;
ll v[N];//装着01化为-1,1的数的数组
ll f[N];//装着预处理的组合数
void moon(){
  cin>>a;
  n=0;
  m=a.size();
  eps(i,0,m+10)v[i]=0; //eps()是一个陋习,define 定义的for循环
  for(auto p:a){
 v[++n]=(p=='1'?1:-1);
  }
  ll res=v[1],ans=0,nres=0;
  multiset<ll>s;//计数,比较方便
  eps(i,2,n)
  {
    while(res==v[i]){
        ans++;i++;//因为记住的不包括自己,所以后面是(p+1)
    }
    nres+=ans;
    if(ans>0)
    s.insert(ans);
    ans=0;
    res=v[i];
  }
    cout<<nres<<' ';
    res=1;
    for(auto p:s){
   //   if(p+1==nres)res=res%mod+1;
      res=res%mod*(p+1)%mod;  //所有可消除元素的连乘法,是一个乘法原理
    }
    res=res%mod*f[(nres)]%mod;//乘以取出来的数的阶乘,用来排位置
    cout<<res%mod<<endl;  
}
int main()
{
  icc(); 
  f[0]=1;
  eps(i,1,N)
f[i]=i%mod*f[i-1]%mod;
 cin>>_;
  while(_--)
  moon();
  return 0;
}

思想分析:

题目先要求的是最小操作次数

很容易贪心贡献的想到,常见的标 -1,1 (当然这个题没用

我们要交替,也就是连续不相等,那么连续相等的元素我们只会保留一个

所以用了一个multiset装着每一次去掉的数,最后输出res(和)

重点的是接下来的东西

我们怎么计算多少种操作方法,显然每个连续的数我们都可以取走(ans-1)个留下一个,也就是一个简单的乘法原理了,ans1 * ans2 * ans3 * ...吗?

100010 中间三个0是我们要清理的,显然是有顺序的,我们可以先拿左边两个,到处拿取,看看样例,它的拿取是有顺序的!

所以我们拿出元素后我们还得排序,分析拿取顺序,乘以(k)! (k是拿出元素的总和)

那么公式就出现了 ∏(1,s.size())len * (k)! (那个特殊字符是连乘)

标签:Alternating,1879C,res,Make,绿名题,++,ans,ll
From: https://www.cnblogs.com/yuexiabaobei/p/18117848

相关文章

  • 学习记录:bazel和cmake运行终端指令
    Bazel和CMake都是用于构建软件项目的工具,但它们之间有一些重要的区别和特点:Bazel:Bazel是由Google开发的构建和测试工具,用于构建大规模的软件项目。它采用一种称为“基于规则”的构建系统,它利用构建规则和依赖关系来自动化构建过程。Bazel支持多种编程语言,包括C++、Java、......
  • Linux上CMAKE的使用
    Linux上CMAKE的使用简单使用格式如下:cmake_minimum_required(VERSION3.0)#最低版本3.0project(main)#项目名称#配置编译器set(CMAKE_CXX_FLAGS${CMAKE_CXX_FLAGS}-g)#配置头文件搜索路径#include_directories()#配置库文件搜索路径#link_directories()#......
  • linux 中 yum makecache 、yum update、yum upgrade的作用
     001、yummakecache的作用是将服务器上的软件包信息缓存到本地,以提高搜索和安装软件的速度。 002、yumupdate:该命令用于更新系统中已安装的软件包到最新版本,但不会安装新的软件包或删除已安装的软件包。 003、yumupgrade:该命令也用于更新系统中已安装的软件包到最新......
  • Linux项目自动化构建工具 --- make/Makefile
    文章目录make/Makefile文件1背景2理解2.1创建执行代码2.2创建makefile文件2.3运行make指令2.3.1依赖关系2.3.2依赖方法2.3.3原理2.4项目清理make/Makefile文件1背景会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文......
  • Make编译之编译32bit ffmpeg
    跨平台编译ffmpeg简述下载ffmpeg源码官网或者github下载使用脚本配置configurehi3798板子厂家提供的编译器,在编译ffmpeg时,必须禁用汇编才能通过使用脚本配置项如下:重要配置项--cross-prefix:使用跨平台工具链的前缀,就是去掉后面如gcc、g++的部分--enable-cross-com......
  • Make编译之编译32bit Qt
    使用Make指定工具链编译Qt简要叙述下过程,避免以后在遇到相似有大致思路顺序总结:获取工具链下载Qt源码;拷贝qtsrc/qtbase/mkspaces/一份文件夹;用实际使用的工具链名称重新命名上一步拷贝的文件夹;编辑重新命名后文件夹内的qmake.conf文件,使用指定的编译器绝对路径;在qtsrc/......
  • postgresql make check报postgres.lto.o:(.note.stapsdt+0x4ac): undefined reference
    如下:/usr/bin/ld:postgres.lto.o:(.note.stapsdt+0x24):undefinedreferenceto`postgresql_statement__status_semaphore'/usr/bin/ld:postgres.lto.o:(.note.stapsdt+0x74):undefinedreferenceto`postgresql_deadlock__found_semaphore'/usr/bin/ld:p......
  • 如何高效的编写makefile
    技术笔记!一、简介1.Make        1)工程管理器,顾名思义,是指管理较多的文件。        2)Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳,自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大......
  • Cmake的安装和配置
    进入Indexof/files/v3.20(cmake.org)下载想要的版本 将安装包解压到想要的文件夹下,复制文件夹下bin目录的路径打开系统变量,将刚刚复制的路径添加进去 最后用Windows+R快捷键打开cmd命令窗口输入cmake-version出现如下的版本号则配置成功 ......
  • Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field p
    完整日志:Causedby:java.lang.reflect.InaccessibleObjectException:Unabletomakefieldprivatefinaljava.lang.Classjava.lang.invoke.SerializedLambda.capturingClassaccessible:modulejava.basedoesnot"opensjava.lang.invoke"tounnamedmodule......