首页 > 其他分享 >2024.7.17

2024.7.17

时间:2024-07-17 20:52:30浏览次数:19  
标签:itn oo 17 2024.7 int long constexpr mod

2024.7.17 【我们必须知道,我们必将知道】

Wednesday 六月十二


P5999 [CEOI2016] kangaroo

//2024.7.17
//by white_ice
//P5999 [CEOI2016] kangaroo
#include<bits/stdc++.h>
using namespace std;
#define itn long long 
#define int long long
constexpr int oo = 4003;
constexpr int mod = 1000000007;

itn n;
int s,t;

itn f[oo][oo];

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);

	cin >> n >> s >> t;
	f[1][1] = 1;
	for (int i=2;i<=n;i++){
		for (itn j=1;j<=n;j++){
			if (i==s||i==t){
				f[i][j] = (f[i-1][j-1]+f[i-1][j])%mod;
				continue;
			}
			itn res = (i>s)+(i>t);
			f[i][j] += f[i-1][j-1]*(j-res);
			f[i][j] += f[i-1][j+1]*j;
			f[i][j]%=mod;
		}
	}
	cout << f[n][1]%mod;
	return 0;
}

第一次做这种块状DP的题,

也并不是很难

题目解法还是挺新颖的

看来以后要多接触这种新出现的题型,

至少不能听都没听过

然后就是模数写错了调了好久

吃一堑:有模数的题错了先考虑一下模数是不是打错了


P3214 [HNOI2011] 卡农

//2024.7.17
//by white_ice
//P3214 [HNOI2011] 卡农
#include<bits/stdc++.h>
using namespace std;
#define itn long long
#define int long long 
constexpr int oo = 1000006;
constexpr int mod = 100000007;

itn n;
itn m;

itn a[oo];
itn k[oo];
itn f[oo];

itn qpow(itn x,itn b){
    int out=1;
    x%=mod;
    for (;b;b>>=1,(x*=x)%=mod)
        if(b&1)
            (out*=x)%=  mod;
    return out;
}
signed main(){
  //  ios::sync_with_stdio(0);
//    cin.tie(0),cout.tie(0);
    cin >> n >> m ;
    a[0] = 1;
    f[0] = 1;
    f[1] = 0;
    k[0] = 1;
    int sum = 1;
    for (itn i=1;i<=n;i++) sum=(sum*2)%mod;
    //sum -= 1;
    for (int i=1;i<=m;i++) a[i]=a[i-1]*(sum-i+mod)%mod;
    for (itn i=1;i<=m;i++)
        k[i]=k[i-1]*i%mod;
    int g = qpow(k[m],mod-2);
    //cout << g;
    for (itn i=2;i<=m;i++)
        f[i] = ((a[i-1]-f[i-1]+mod)%mod-f[i-2]*(i-1)%mod*(sum-i+1+mod)%mod+mod)%mod;

    cout << (f[m]*g)%mod;
    return 0;
}

题目很简单,

从已有的集合中选出m个不同集

要求每个元素被选择的次数为偶数

思路还是比较麻烦的

  1. 首先,考虑有序选择i个集合的方案数,记作f[i]

  2. 考虑去掉有序性,就是\(\frac{f[i]}{i!}\)

  3. 考虑使用其他方式表达出f[i]

\[除去空集,共有2^n-1个集合可选 \]

\[则共A_{2^n-1}^{i-1}种可能 \]

  1. 之后考虑去掉空集可能,

不难发现对于这个f[i],

加入空集并不会产生什么影响

则需减去这f[i-1]种可能

\[A_{2^n-1}^{i-1}-f[i-1] \]

  1. 考虑去除重复可能

钦定新加入的第i个与前面第j个重复

则剩余的i-2个为合法方案,

枚举可能出现的前i-1个和可能出现重集的\(2^n-1-(i-2)\)个集合

\[f[i] = A_{2^n-1}^{i-1}-f[i-1]-f[i-2]*(i-1)*[2^n-1-(i-2)] \]

  1. 得出答案为\(f[m]/m!\)

这里记得求逆元


Balanced Subsequences

唯一一道在听课时就听懂的题目

//2024.7.17
//by white_ice
//Balanced Subsequences
#include<bits/stdc++.h>
using namespace std;
#define itn int
constexpr int oo = 4003;
constexpr itn mod = 1000000007;

itn t;
itn n,m,k;
int c[oo][oo];
void getc(){
    for (itn i=0;i<=4000;i++)
        c[i][0] = 1;
    for (itn i=1;i<=4000;i++)
        for (itn j=1;j<=i;j++)
            c[i][j] = (c[i-1][j-1]+c[i-1][j])%mod;
}


signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);

    getc();

    cin >> t;
while (t--){
    cin >> n >> m >> k;
    if (k>m||k>n){
        cout << 0 << '\n';
        continue;
    }
    cout << (c[n+m][k]+mod-c[n+m][k-1])%mod << '\n';
}
    return 0;
}

关键:找到一个奇妙的小转化

共k对匹配成功,则说明剩余的左右括号,以

\[))))))((((((( \]

这种形式存在,

即提供了n+m-*k个空位

插入合法括号序列即可


标签:itn,oo,17,2024.7,int,long,constexpr,mod
From: https://www.cnblogs.com/white-ice/p/18308256

相关文章

  • 2024.7.17 鲜花
    極私的極彩色アンサー-TOGENASHITOGEARI——fromK*(K8)我怎么每天早上补昨天没写完的鲜花。算了,放到今天吧。书接上回发现2开了,和幂次没关系了。发现有\(b-a+1\)个数,猜到是区间。考虑\(p\)和分布位置,可知是质数。线性筛即可。910.值域偏大,可以用Miller_......
  • 2024-07-17 如何在vscode部署你的代码块,从而在新建页面时能快速搭建模板(windows环境)
    步骤一:打开vscode,按住ctrl+shif+p唤出命令窗口 步骤二:在窗口中输入命令,并回车Preferences:OpenUserSnippets 对,就是这个代码片段,接着输入你想添加代码的某某语言or脚本,比如我要添加vue的代码片段输入vue,回车,会显示vue.json文件出来给你更改,我的是这样 注意:如果你......
  • 17-2 向量数据库之野望2 - 基础宝典
    介绍矢量数据库是一项技术,已成为不断变化的数据管理领域的重大变革者。凭借其无与伦比的速度和效率,这些尖端数据库正在彻底改变数据检索的规范。我们将在这次深入研究中探索矢量数据库的细微差别,理解其基本概念,并提供代码示例来展示其革命性的能力。传统关系型数据库难以满足......
  • 2024-07-17 搭建一个node+express服务器,并把静态资源部署到该服务器(本地开发)
    前言:请确保你已安装了node,没有你得先装这个。步骤一://创建文件夹mkdirexpress-node//创建完了进入该文件夹cdexpress-node//初始化npminit-y//安装expressnpmiexpress前提工作都准备好后,在express-node文件夹里新建文件server.js,作为启动服务器的入口文件......
  • 实训day8(7.17)
    (一)ssh服务1.搭建ssh服务1.openssh2.ssh-server3.ssh-client注意事项:关闭防⽕墙与SELinux(不关SElinux导致sshd的端⼝⽆法修改)2.配置yum源JumpServer配置外⽹YUM源=>阿⾥云首先去浏览器搜索阿里云镜像站,找到与我们系统匹配的源进行复制然后回到我们虚拟机,用wget进行......
  • 练习题三(7.17)
    任务1、新增账号zhangsanlisiwangwuzhaoliuaaabbbcccddd [root@2~]#useraddzhangsan [root@2~]#useraddlisi [root@2~]#useraddwangwu [root@2~]#useraddzhaoliu [root@2~]#useraddaaa [root@2~]#useraddbbb [root@2~]#useraddccc......
  • 闲话 717 - LGV 引理的小应用
    这是我们的某一天的联考题目:\(n\le500\)。显然使用平面图完美匹配计数可以获得\(O(n^6)\),但是有一种神秘的对路径的双射。当时我们都认为这是超级人类智慧,但是今天看书发现是书上的某个例的题的方法(有不同)。。考虑对正六边形的菱形密铺方案数(上图)。可以等价的问题是完美匹......
  • 2024.7.15 近期练习
    P3488[POI2009]LYZ-IceSkates我们对于鞋码为\(x\)的人,贪心地,显然先把鞋小的给他穿。所以就有了一个暴力的检验方法:从左往右扫,并对应修改。但是这样太慢。这是一个二分图匹配问题,考虑Hall定理。对于任意\(1\lel\ler\len\),当\(sum(a_l\sima_r)\le(r-l+1+d)k\)时合......
  • 2024-07-17 vite打包vue项目,无法正确加载,报错:TypeError: Failed to resolve module sp
    我这会打算打个包扔到线上看看效果,结果线上报错:TypeError:Failedtoresolvemodulespecifier"vue".Relativereferencesmuststartwitheither"/","./",or"../".奇怪,之前还好好的,因为本地调试什么的都正常,甚至昨天都可以打包。我不信邪,遂新建vue项目,做一下测试,这......
  • 题解:P10417 [蓝桥杯 2023 国 A] 第 K 小的和
    分析这道题不是板子么。先对序列排序,然后二分答案,设当前答案为\(x\),枚举\(a\)中的数,然后二分查找\(b\)中不大于\(x-a\)的元素个数,累加判断是否不大于\(k\)。然后稍微调一调端点就过了。Code#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#incl......