首页 > 其他分享 >2024.2.16 そんな凡庸を探して、探している

2024.2.16 そんな凡庸を探して、探している

时间:2024-02-16 21:33:55浏览次数:32  
标签:2024.2 return 16 int modint operator 凡庸 mod define

Namid[A]me 好听呢。可惜了。
今天 DP 专题感觉 laofu 选的题有点经典,导致我有一半时间在摸鱼,不过还是写了点题的。
怎么西工大附中有糖醋茄子这种神秘菜啊。

ICPC 2020 Macau B Boring Problem

其实不一定懂完了,试着说一说。
显然询问没什么用,问题本质是要求解一个 AC 自动机上游走问题。
直接高斯消元显然寄飞了,考虑优化。
考虑原本的高斯消元是什么样的,是:\(f_u=\sum_{i=1}^k p_i f_{tr(u,k)}+1\)。
考虑主元法,发现这样一件事:如果在原 Trie 上某个节点只有一个儿子,这个点在 AC 自动机上的其余转移全部会指向向上的节点,于是可以用父亲的方程推出儿子用主元表示的结果。
于是令根节点与儿子个数大于二的节点的儿子们作为主元,这样就只有 \(O(n)\) 个主元,可以使用 BFS 推出所有元用主元表示的结果,以结束点答案为 \(0\) 和「儿子个数大于二的节点」存在两种表示:「用儿子们」「从父亲推」来构造方程,于是就做到 \(O(n^3)\),Code
昨天模拟赛 T3 就这个东西加后半的普及组答辩,不写了。

IOI2005 River

令 \(f_{u,j,k}\) 表示对于点 \(u\) 钦定祖先 \(j\) 作为最近的伐木场,子树内选了 \(k\) 个伐木场,\(g_{u,j,k}\) 同上,但是 \(u\) 是一个伐木场,同时这个也没算进 \(k\) 里面。
于是暴力 DP 复杂度就是 \(O(n^2k^2)\),对了,Code

TC12909 Seat Friends

令 \(f_{i,j}\) 表示当前 \(i\) 个人 \(j\) 段,于是可以列出转移柿子:

\[\begin{aligned} 2jf_{i,j}&\to f_{i+1,j}\\ jf_{i,j}&\to f_{i+1,j-1}\\ jf_{i,j}&\to f_{i+1,j+1} \end{aligned} \]

最后计算答案需要上一个组合数,还得记得考虑圆是可以转圈的,\(O(n^2)\),Code

CS Academy Round #32 Sum of Powers

需要知道 \(f_{i,j}\) 表 \(i\) 个数凑出 \(j\) 这样的 DP。
于是就会发现求 \(f_{i-k,j-k*l}k^m\) 的总和就是答案了,证明很好证。

/*
Author: cnyz
世界があたしを拒んでも今 愛の唄 歌わせてくれないかな
*/
#include<bits/stdc++.h>
using namespace std;

using db=double;
using ll=long long;
using vi=vector<int>;
using pii=pair<int,int>;
using ull=unsigned long long;

#define fi first
#define se second
#define gc getchar
#define pb emplace_back
#define mkp make_pair
#define push emplace
#define sz(a) (int)a.size()
#define all(p) p.begin(),p.end()
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define ROF(i,a,b) for(int i=a;i>=b;i--)
#define ppc(x) __builtin_popcount(x)
#define clz(x) __builtin_clz(x)

bool Mbe;

void chkmax(int &x,int y) {if(x<y) x=y;}
void chkmin(int &x,int y) {if(x>y) x=y;}
void chkmax(ll &x,ll y) {if(x<y) x=y;}
void chkmin(ll &x,ll y) {if(x>y) x=y;}
int read() { int x; cin>>x; return x; }

const int mod=1e9+7;
struct modint {
    int x;
    modint(int o=0) { x=(0ll+mod+o)%mod; }
    modint &operator = (int o) { return x=o,*this; }
    modint &operator += (modint o) { return x=(x+o.x)%mod,*this; }
    modint &operator -= (modint o) { return x=(mod+x-o.x)%mod,*this; }
    modint &operator *= (modint o) { return x=1ull*x*o.x%mod,*this; }
    modint &operator ^= (int b) {
        modint a=*this,c=1;
        for(;b;b>>=1) { if(b&1) c*=a; a*=a; }
        return x=c.x,*this;
    }
    modint &operator /= (modint o) { return *this*=(o^=mod-2); }
    friend modint operator + (modint a,modint b) { return a+=b; }
    friend modint operator - (modint a,modint b) { return a-=b; }
    friend modint operator * (modint a,modint b) { return a*=b; }
    friend modint operator / (modint a,modint b) { return a/=b; }
    friend modint operator ^ (modint a,int b) { return a^=b; }
    friend bool operator == (modint a,int b) { return a.x==b; }
    friend bool operator != (modint a,int b) { return a.x!=b; }
    bool operator ! () { return !x; }
    modint operator - () { return x?mod-x:0; }
    bool operator < (const modint &b) const { return x<b.x; }
};

const int N=5005;
modint f[N][N],g[N];
void solve() {
    int n=read(),K=read(),m=read();
    f[0][0]=1;
    FOR(i,0,K-1) FOR(j,0,n) {
        f[i+1][j+1]+=f[i][j];
        if(i&&j+i<=n) f[i][j+i]+=f[i][j]; 
    }
    modint o=0;
    FOR(i,1,n) FOR(j,1,K) if(i*j<=n) {
        modint pm=i; pm^=m;
        o+=f[K-j][n-i*j]*pm;
    }
    cout<<o.x<<"\n";
}

bool Med;
int main() {
    ios::sync_with_stdio(false),cin.tie(0);
    // fprintf(stderr, "%.3lf MB\n", (&Med - &Mbe) / 1048576.0);
    int T=1;
    while(T--) solve();
    // fprintf(stderr, "%d ms\n", int(1e3 * clock() / CLOCKS_PER_SEC));
}

标签:2024.2,return,16,int,modint,operator,凡庸,mod,define
From: https://www.cnblogs.com/cnyzz/p/18017498

相关文章

  • 洛谷P6169 [IOI2016] Molecules
    洛谷传送门分析结论:如果存在解,则一定有一个解使得选的数是排序后的一段前缀并上一段后缀。下文所说序列均已排序。引理:对于一个可行解选的某个数,一定可以将其换成序列中的最小数或最大数而使得换完之后还是一个可行解。证明:反证法。假设都不可换。设当前选的所有数的和为\(......
  • CF1624D【黄】-思维题
    题目:https://www.luogu.com.cn/problem/solution/CF1624D这道题很简单,但是启发我把这一类题都起名为思维题,贪心题大部分都是思维题,但还有很多不属于贪心题的思维题,总之思维题就是考察思维能力,和算法无关,通常能做出来的都能轻松做出,做不出来的想破头也想不出来,这道题属于前者。C......
  • 2.16
        ......
  • 2024.2.16模拟赛总结
    前言:这次不太好,rank6,挂了108.5分,不挂就随便rank1了T1直接状压,设\(f[S][i][j][0/1]\)表示当前选的集合为S,最后两个分别为i,j的方案数和最优解,然后直接跑有亿点细节1:要开longlong,方案数可能很大(造一个完全图)2,要从合法的状态转移3,特判只有一个点的数据T2一道计算几何题首先......
  • 2023.2.16 LGJ Round
    A你有一个数组\(a\),初始为\(0\),你要使\(a_i\geh_i\),你可以把任意相邻两个\(a\),一个加一,另一个加二。问最少操作多少次。\(n,h\le1e6\)。B你需要求大小为\(n\)的环的个数,使得旋转后都不同。你可以选若干个点出来染上\(k\)个颜色中的一个,但是相邻两个点不能都能染颜......
  • 2024.2.15 模拟赛
    模拟赛打的一般,T1做唐了,T2转化完发现不会数据结构,T3不会AC自动机白给了。T3鸽了,明天写个弱化版,嗯缝点东西我不知道怎么想的。下午讲了几个图论题,感觉有好几个题听得很懂,抽空再写吧,现在题真的太多了。神秘手玩一下会发现,奇数里面必定有恰好除以二下取整个数取负号。讨论......
  • 2024.2.15 咸话
    早上起来时突然真正意识到只有两周就要省选了。只是感觉,眼前的世界,太迷茫了。往事不堪回首,未来又可望不可及。成败真的就在此一时了,但是我为什么还有好多好多要准备的事。还记得初一时那个逆风翻盘的我和那段时光吗?短短四年,每次我都在重新寻回那时的我,但一次次的失败。前几天偶......
  • P3643 [APIO2016] 划艇
    题意给定数列\(a,b\),试求出序列\(S\)的方案数,使得:\(a_i\leS_i\leb_i,S_{i-1}<S_i\)或\(S_i=0\)。\(S\)不能是全\(0\)序列。\(a_i,b_i\le10^9,n\le500\)Sol不难想到一个trivial的思路。设\(f_{i,j}\)表示确定了\(S_1\toS_i\),并且\(S......
  • P1618 三连击(升级版)
    三连击(升级版)题目描述将\(1,2,\ldots,9\)共\(9\)个数分成三组,分别组成三个三位数,且使这三个三位数的比例是\(A:B:C\),试求出所有满足条件的三个三位数,若无解,输出No!!!。//感谢黄小U饮品完善题意输入格式三个数,\(A,B,C\)。输出格式若干行,每行\(3\)个数字。按照每行......
  • 2024.2 训练纪要
    目录2024.2.15R35T2弱化的杨表R35T3达拉然的废墟THUWC+NOIWC+过年完了,得滚回来打模拟赛了。快要省选了哈哈。要寄大了。WC2024游记可能还是会持续更新的,毕竟讲的题整理没整理完代码也一个都没写,有点傻逼。2024.2.15100/100/20,sum220,rk12/98我这波是致......