首页 > 其他分享 >2024年03月随便做做

2024年03月随便做做

时间:2024-04-11 20:23:32浏览次数:21  
标签:__ 03 做做 int res 2024 cdot choose io

2024.03.01 ~ 2024.03.08

图论杂题

2024.03.13

Codeforces - 1278F

做完了之后翻了翻题解,发现做法都比较复杂,其实有更简单的做法如下。

考虑一个关于第二类斯特林数的等式:

\[x^k=\sum_{i=0}^{k}S_2(k, i)\cdot {x\choose i}\cdot i! \]

因为除开系数之后全是和式,因此可以直接变成期望:

\[\begin{aligned} E[x^k]&=E[\sum_{i=0}^{k}S_2(k, i)\cdot {x\choose i}\cdot i!] \\ &=\sum_{i=0}^kS_2(k,i)\cdot E[{x\choose i}]\cdot i! \end{aligned} \]

考虑:

\[E[{x\choose i}]=\sum_{p_1<p_2<\cdots<p_i}\prod_jP[A_{p_j}] \]

其中 \(A_j\) 表示第 \(j\) 次洗牌时满足题目要求的事件,显然 \(P[A_j]=\frac{1}{m}\)。

上述式子考虑组合意义可以轻松地变成:

\[E[{x\choose i}]={n\choose i}\frac{1}{m^i} \]

因此有:

\[\begin{aligned} E[x^k]&=\sum_{i=0}^kS_2(k,i)\cdot E[{x\choose i}]\cdot i! \\ &= \sum_{i=0}^k S_2(k,i)\cdot {n\choose i}\cdot \frac{i!}{m^i} \end{aligned} \]

然后可以 \(O(k)\) 求值。第二类斯特林数递推求值是 \(O(k^2)\) 的。

总时间复杂度 \(O(k^2)\)。

2024.03.18

Codeforces - 578F Mirror Box

很好的题目,爱来自矩阵数定理。

结论是满足限制当且仅当网格上 \(x+y\) 为奇数的点构成生成树或偶数点构成生成树。

Submission #252017022 - Codeforces

Luogu - P4022 [CTSC2012] 熟悉的文章

很套路的题目,爱来自 SAM。

对每个标准作文,中间夹上特殊字符放在一个 SAM 中。

对于每个待检查作文,在每个串的每个位置上计算以这个串结尾时往前最长能在标准作文库中匹配多少长度。

然后二分,单调队列 DP 即可。

// Not afraid to dark.

#include <bits/stdc++.h>
using namespace std;

clock_t start_time, end_time;
#define GET_START start_time = clock ();
#define GET_END end_time = clock (); fprintf (stderr, "TIME COSSEMED : %0.3lf\n", 1.0 * (end_time - start_time) / CLOCKS_PER_SEC);

#define int long long

namespace io {
    // io : read , write
}

const int N = 1e6, mod = 1e9 + 7;
int n, m, k, f[N + 5], g[N + 5], ans;

__inline__ __attribute__ ((always_inline)) int power (int a, int p){
    int res = 1;
    while (p > 0){
        if (p & 1)
            res = res * a % mod;
        a = a * a % mod;
        p >>= 1;
    }
    return res;
}

signed main (){
    GET_START

    io::read (n), io::read (m), io::read (k);
    if (k == 1)
        io::write (power (m, n)), puts ("");
    else {
        f[0] = 1;
        for (int i = 1;i <= n;++ i){
            f[i] = (g[i - 1] - g[max (0ll, i - k)] + mod) * (m - 1) % mod;
            if (i < k)
                f[i] = (f[i] + m) % mod;
            g[i] = (g[i - 1] + f[i]) % mod;
        }
        int iv = power (m, mod - 2);
        for (int i = 1, pw = power (m, n - k);i <= n - k + 1;++ i, pw = pw * iv % mod)
            ans = (ans + f[i - 1] * (m - 1 + (i == 1)) % mod * pw % mod) % mod;
        io::write (ans), puts ("");
    }

    GET_END
    return 0;
}

2024.03.25

hackearth - Perfect Permutations

巧妙的题目,爱来自 欧拉五边形数定理

// Not afraid to dark.

#include <bits/stdc++.h>
using namespace std;

#define int long long

namespace io {
    // io : read , write
}

const int K = 1e5, mod = 1e9 + 7;
int n, k;
int inv[K + 5], inj[K + 5], jc[K + 5];
int ans;

__inline__ __attribute__ ((always_inline)) int pentagonal (int x, int delta){
    return x * (3 * x + delta) / 2;
}

__inline__ __attribute__ ((always_inline)) int C (int x){
    return jc[x] * inj[x] % mod;
}

__inline__ __attribute__ ((always_inline)) char Calc (int x, int delta){
    int frm = k - pentagonal (x, delta), res;
    if (frm < 0)
        return 0;
    res = C (frm);
    if (x & 1)
        res = mod - res;
    ans = (ans + res) % mod;
    return 1;
}

signed main (){
    for (int T = io::read ();T --;){
        io::read (n), io::read (k);
        inj[0] = inj[1] = inv[1] = jc[0] = 1;
        jc[1] = n;
        for (int i = 2;i <= k;++ i){
            inv[i] = inv[i - mod % i] * (mod / i + 1) % mod;
            inj[i] = inj[i - 1] * inv[i] % mod;
            jc[i] = jc[i - 1] * (n - 1 + i) % mod;
        }
        ans = C (k);
        for (int i = 1, frm;i <= k;++ i)
            if (! (Calc (i, 1) | Calc (i, - 1)))
                break;
        io::write (ans), puts ("");
    }
    return 0;
}

2024.03.31

QOJ - #1280.Fibonacci Partition

我的题解

标签:__,03,做做,int,res,2024,cdot,choose,io
From: https://www.cnblogs.com/imcaigou/p/18129966

相关文章

  • 接口实现-删除文章(2024-4-11)
    代码量:500时间:5h博客量:1今天写了Android的前端页面,和页面功能的基本实现,剩下最难的接口调用方面了下面是跟的项目的一个简单接口//controller@DeleteMappingpublicResultdelete(Integerid){articleService.delete(id);returnResult.success();......
  • 题解 P10314【[SHUPC 2024] 函数】
    注意到:\[f(x)=\lfloorx\rfloor,\qquad(x\notin\N)\]代码:intT;doublex;cout<<fixed<<setprecision(12);for(cin>>T;T;--T){cin>>x;cout<<floor(x)<<endl;}感觉说明不够过不了审,于是简单说一下正确性:由诱导公式\(\c......
  • 北京大学2024春季高等数学A(II)试题及简评
    总的来说,难度适中,可能第一题会卡一下,是一个极坐标的反向换元,如果想不到硬做还是挺难的,非常遗憾,博主没有瞪眼法瞪出来,最后才想出来但是已经来不及了TAT。另外二、六题都是挖洞法,分别是Stokes和Green的挖洞法,只要细心发现被积函数和积分区域的奇点就可以。第三题的不能使用Gauss......
  • '1' or 'a'='a'
    2222safcscvNQxxl/wJ9vvE2i0XC6wyPUPzA2KO+J+yvnM9IlZDkmeyQO9SXnyy9HkSPOphCeuSG1JUflh0hvT50PADnwCw+7wmaW7LTla18KbasIhuEa4Kx82TuAyQHtatiF01HxLkkCoWuaSa2jy7oIyL0KkZZqfM0ovk+jmlRl786mb5AT7wXCFTnN2yK/Eqo+aCyvkimeWofJJ31+oNXMXLUjcpRH7MXIUqZG4wqDOZ2Lm04LUqA/kEv......
  • 2024年4月9日-UE5-控件切换器、多存档、存档日期、游戏时长
    加入多存档,和每个存档的时间 打开UI登录界面,选中画布,包裹一个控件切换器 选中控件,改名,是变量 再新建一个画布,拖到控件切换器里,把之前的改名默认画布,新建的叫读档画布 复制一个背景模糊到读档画布里 打开“继续游戏”这个按钮,在他后面添加点击后切换到读档画布的指......
  • 3dmax2024渲染大图高清参数,3dmax效果图渲染设置
    ​2024版的3dsMax带来了更为强大的渲染工具和优化的参数设置,使得设计师能够创造出令人惊叹的视觉作品,何利用3dsMax2024的先进功能,精心调整渲染参数,以实现高分辨率、高质量的效果图输出,满足专业设计和视觉表现的需求。下面一起来看看。3dmax2024渲染高清图的参数设置1、打开......
  • 2024-04-11 15:45
    今天终于是写上日记了,之前要么没时间要么就不想写,过完年后有一大片空白期,领导看我们很清闲,就给我们各自安排学习任务,我学习Flutter相关知识,但是学习了之后发现Flutter是个框架,里边的语言是dart语言,发现还的学习dart,还要整理学习文档,哦我的天之前的东西都没明白就又学习另外一种语......
  • 2024.04.11NOIP模拟赛 #1 记录
    2024.04.11NOIP模拟赛#1记录AT_arc160_e[ARC160E]MakeBiconnected给你一棵\(n\)个节点由无向边组成的二叉树,树上每个点有权值\(w_i\)。你可以把两个点之间连无向边,如果将\(u\)与\(v\)连边,代价是\(w_u+w_v\)。请给出一种连边方式,使得连边后,图中去掉任何一个点仍然......
  • 写一个函数,算出两个文件的相对路径,如b='/a/b/12/34/c.php';计算出a的相对路径应该是..
    <?phpfunctionreleative_path($path1,$path2){$arr1=explode("/",dirname($path1));$arr2=explode("/",dirname($path2));for($i=0,$len=count($arr2);$i<$len;$i++){if($arr1[$i]!=......
  • 20240409
    T1TopcoderSRM593div2Hard-MayTheBestPetWin由于每个宠物都要被分到一组中,所以只需要知道一组中的\(\summx-\summn\)就可以推出另一组的\(\summx-\summn\)。然后直接背包dp即可。代码#include<iostream>usingnamespacestd;constintN=500000;i......