牛客网暑期ACM多校训练营(第一场)

牛客网暑期ACM多校训练营(第一场)


A. Monotonic Matrix

考虑0和1的分界线,1和2的分界线,发现问题可以转化为两条不互相穿过的路径的方案数(可重叠),题解的做法就是把一条路径斜着平移,然后就转化为不可重叠了。现在考虑,如何计算从(0,0)道(n,m)不相交不可重叠的方案数,一条从(0,1)出发到达(n-1,m),一条从(1,0)出发到达(n,m-1),将他们乘起来的结果还包含相交的情况,于是再减去从(0,1)到(n,m-1)与(1,0)到(n-1,m)的方案数。

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
#define MP make_pair
#define fr first
#define sc second
typedef long long ll;
const int N = 1e5 + 7;
const ll mod = 1e9 + 7;
using namespace std;
ll n,m,CC[2005][2005];
ll C(int n,int m) {return CC[n][m];}
int main() {rep(i,0,2003) CC[i][i]=CC[i][0]=1;rep(i,2,2003)rep(j,1,i) CC[i][j] = (CC[i-1][j]+CC[i-1][j-1])%mod;while(scanf("%lld%lld",&n,&m)!=EOF) {ll ans = ((C(n+m,m)*C(n+m,m))%mod - (C(n+m,m+1)*C(n+m,n+1))%mod+mod)%mod;printf("%lld\n",ans);}return 0;
}

B. Symmetric Matrix

关键在于把这个矩阵,考虑成一个邻接矩阵,然后发现一个每个点有两条边,且无自环,可以有重边。这张图实际上就是,每个点都属于唯一的一个环,环的大小大于等于2。求这种图的方案数。好像第一类斯特灵数?还得递推搞一下。详见:大佬的推导

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define pb push_back
typedef long long ll;
const int N = 1e5 + 7;
using namespace std;
ll dp[N],n,m;
int main() {dp[1] = 0, dp[2] = 1, dp[3] = 1, dp[4] = 6;while(scanf("%lld%lld",&n,&m)!=EOF) {if(n<=4) {printf("%lld\n",dp[n]%m);}else {ll M;rep(i,5,n)M = 1LL*(i-1LL)*(i-2LL)/2LL,M%=m,dp[i] = (((((i-1)*dp[i-1])%m + ((i-1)*dp[i-2])%m)%m) - (M*dp[i-3])%m + m)%m;printf("%lld\n",dp[n]);}}return 0;
}

D. Two Graphs

\(n!\) 枚举与 \(G1\) 同构的图,在 \(G2\) 中找到相应的边,如果 \(m1\) 条边都可以匹配到,则将这种方案中用到的边压成一个64位二进制数,放到set里去重。另一种思路是,出现重算的情况就是,这个同构的图与自身的图相同,即使用这些点的映射,形成的新图与原图一致,这种自同构的情况要从答案中除去。

#include <bits/stdc++.h>
typedef unsigned long long ll;
const ll seed = 31;
const ll mod = 1e9 + 7;
inline int read() {char c = getchar();int x=0, f=1;while(c<'0'||c>'9'){if(c=='-')f = -1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}
using namespace std;
int n,m1,m2,g[11][11],PH[11];
pair<int,int> p[1111];
int main() {while(scanf("%d%d%d",&n,&m1,&m2)!=EOF) {set<int> s;s.clear();memset(g,0,sizeof(g));for(int i=1;i<=m1;++i) {int u=read(),v=read();g[u][v] = g[v][u] = 1;}for(int i=1;i<=m2;++i) {int u=read(),v=read();p[i] = make_pair(u,v);}for(int i=1;i<=n;++i) PH[i]=i;do{ll hs=0,cnt=0;for(ll i=1;i<=m2;++i){if(g[PH[p[i].first]][PH[p[i].second]]) {hs |= ((ll)1<<(i-(ll)1));++cnt;}}if(cnt == m1)s.insert(hs);}while(next_permutation(PH+1,PH+1+n));printf("%d\n",(int)s.size());}return 0;
}

J. Different Integers

先写了分块莫队tle,然后写了曼哈顿mst莫队tle,然后分块乱狗tle,t到终场。结束后,加了个快读,分块莫队ac..。还有其他一些做法,其实把整个序列在后边复制一份,不就变成了单个区间询问数字种类的模板题了。(让快读成为习惯。。。为何泥萌常数辣么小

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
#define MP make_pair
#define fr first
#define sc second
typedef long long ll;
const int N = 1e5 + 7;
inline int read() {char c = getchar();int x=0, f=1;while(c<'0'||c>'9'){if(c=='-')f = -1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}
using namespace std;
int n,q,a[N];
struct pp{int l,r,id,ans;}Q[N];
int B,belong[N];
void build() {B = sqrt(n);for(int i=1; i<=n; i++) belong[i] = (i-1)/B + 1;
}
bool cmp(pp a, pp b) {if(belong[a.l] == belong[b.l]) return a.r < b.r;return belong[a.l] < belong[b.l];
}
int sum=0,num[N];
void update(int p,int d) {if(num[a[p]]==1&&d==-1) --sum;else if(num[a[p]]==0&&d==1) ++sum;num[a[p]]+=d;
}
bool cmp1(pp a,pp b) {return a.id < b.id;
}
int main() {while(scanf("%d%d",&n,&q)!=EOF) {for(int i=1;i<=n;++i)num[i]=0;build();for(int i=1;i<=n;++i)a[i]=read();for(int i=1;i<=q;++i) {Q[i].l=read(),Q[i].r=read();Q[i].id=i;}sort(Q+1,Q+1+q,cmp);int l=0, r=n+1;sum = 0;for(int i=1;i<=q;++i) {while(r<Q[i].r)update(r,-1),++r;while(r>Q[i].r)--r,update(r,1);while(l<Q[i].l)++l,update(l,1);while(l>Q[i].l)update(l,-1),--l;Q[i].ans = sum;}sort(Q+1,Q+1+q,cmp1);for(int i=1;i<=q;++i)printf("%d\n",Q[i].ans);}return 0;
}

转载于:https://www.cnblogs.com/RRRR-wys/p/9339002.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2014 ACM/ICPC Asia Regional Xi'an Online

2014西安网络赛 A. Post Robot 把每种单词都kmp跑一遍&#xff0c;顺序输出即可 #include <cstdio> #include <iostream> #include <algorithm> #include <map> #include <cstring> #include <cmath> #include <queue> #include <…

MongoDB发布4.0版本,支持ACID事务

MongoDB最近发布了最新的4.0版本。毫无疑问&#xff0c;这一版本的主要特性是支持多文档ACID事务。MongoDB向与关系型数据库产品的融合迈出了一大步&#xff0c;现在支持会话的概念&#xff0c;并可以使用start_transaction()和commit_transaction()方法将多个数据库命令包含在…

P5491-[模板]二次剩余

正题 题目链接:https://www.luogu.com.cn/problem/P5491 题目大意 求解x2N(modP)x^2N(mod\ \ P)x2N(mod P) 解题思路 若aaa在模ppp意义下可以开根那么aaa就是ppp的二次剩余&#xff0c;定义 (ap){1(a是p的二次剩余)−1(a是p的二次非剩余)0(p∣a)\binom{a}{p}\left\{\begin{…

【递归】桐桐的递归函数

桐桐的递归函数 题目大意&#xff1a; 有一个函数&#xff0c;让你照着打 原题&#xff1a; 题目描述 桐桐经常找一些很有趣的数学书来阅读以增长自己的数学知识。一天&#xff0c;他偶然发现一个递归函数w&#xff08;a&#xff0c;b&#xff0c;c&#xff09;有以下性质…

分享我编程工作经历及对软件开发前景的看法

本人一直从事互联网行业&#xff0c;熟练C#、javascript,熟悉C\C,JAVA,php,object-c,熟练的开发工具有Visual Studio,数据库是MS SQL SERVER。这两天实在是无聊&#xff0c;回忆一下本人的工作经历&#xff0c;一路走来很辛苦&#xff0c;很坎坷&#xff0c;现在都快40岁了&…

P4026-[SHOI2008]循环的债务【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4026 题目大意 333个人&#xff0c;有一些面值为100,50,20,10,5,1100,50,20,10,5,1100,50,20,10,5,1的钱&#xff0c;一些人欠一些人钱&#xff0c;求最少交换多少张钞票可以还清。 解题思路 我们设fi,j,kf_{i,j,k}fi,j,k​…

【模拟】桐桐的新闻系统

桐桐的新闻系统 题目大意&#xff1a; 有n个人&#xff0c;每个人有自己的ID和收新闻的间隔&#xff0c;问前k次发送新闻是分别发给谁的 原题&#xff1a; 题目描述 桐桐为期末的电脑作业设计一套新闻系统&#xff0c;他把这套系统称为Argus。 使用这套系统的用户可以向这…

实体类的动态生成(三)

前言在 .NET 中主要有两种动态生成并编译的方式&#xff0c;一种是通过 System.Linq.Expressions 命名空间中的 LambdaExpression 类的 CompileToMethod(...) 方法&#xff0c;但是这种方法只支持动态编译到静态方法&#xff0c;因为这个限制我们只能放弃它而采用 Emitting 生成…

牛客网暑期ACM多校训练营(第三场)

牛客网暑期ACM多校训练营&#xff08;第三场&#xff09; A. PACM Team 01背包&#xff0c;输出方案&#xff0c;用bool存每种状态下用的哪一个物品&#xff0c;卡内存。官方题解上&#xff0c;说用char或者short就行了。还有一种做法是把用的物品压成一个int。 #include <b…

P4096-[HEOI2013]Eden的博弈树

正题 题目链接:https://www.luogu.com.cn/problem/P4096 题目大意 一个博弈树&#xff0c;黑方先手。定义一个最小的叶子节点集为黑胜状态为黑方胜利集合&#xff0c;白色亦然。求所有既属于黑方胜利集合有属于白方胜利集合的点。 解题思路 设fi,0/1f_{i,0/1}fi,0/1​表示ii…

【DP】数字编码

数字编码 题目大意&#xff1a; 有一个序列&#xff0c;可以把它分为一些子序列&#xff0c;但要按题意用字符串表示出来&#xff0c;现在要求字符串的字符最小是多少 原题&#xff1a; 题目描述 一列有顺序的非负整数&#xff0c;需要把它们编码成一个0、10、10、1字符串…

NOIP2013货车运输

NOIP2013货车运输 题目描述 A 国有 n 座城市&#xff0c;编号从 1 到 n&#xff0c;城市之间有 m 条双向道路。每一条道路对车辆都有重量限制&#xff0c;简称限重。现在有 q 辆货车在运输货物&#xff0c;司机们想知道每辆车在不超过车辆限重的情况下&#xff0c;最多能运多重…

52ABP模板 ASP.Net Core 与 Angular的开源实例项目

阅读文本大概需要 5 分钟。开始之前自从上一篇文章".NET:持续进化的统一开发平台"发布后&#xff0c;已经有三个月的时间没有写过文章了。这段时间&#xff0c;做了两场线下活动&#xff0c;一场在上海&#xff0c;一场在成都。 中途顺带去参加了微软的人工智能的ope…

jzoj1281-旅行【dp】

正题 题目大意 nnn个地方&#xff0c;第iii个高度为hih_ihi​。每次可以交换一个hjh_jhj​和hj1h_{j1}hj1​但是要满足操作的jjj递增。 解题思路 也就是可以选择若干个区间&#xff0c;然后将区间的头部丢到尾部。 发现dpdpdp的瓶颈在于我们在枚举下一个时无法知道上一个的具…

初一模拟赛总结(2019.6.15)

成绩&#xff1a; 注&#xff1a;T1好像因为精度问题&#xff0c;有一些本地对的代码交上去WA了 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4T5T5T5111lyflyflyf320320320202020100100100100100100100100100000222hkyhkyhky298298298989898100100100100…

概率期望学习笔记

概率期望学习笔记 POJ3869 题意&#xff1a;两个人转左轮手枪&#xff0c;朝自己打&#xff0c;枪里保证至少有一个空的&#xff0c;你的对手上一轮活下来了&#xff0c;现在到你了&#xff0c;问重新转左轮和直接打&#xff0c;哪个概率高。 做法&#xff1a;考虑00&#xff0…

jzoj1282-资源勘探【统计】

正题 题目链接:https://gmoj.net/senior/#contest/show/3146/2 题目大意 一个以左上角为端点的子矩形价值定义为区间内唯一的数的数量&#xff0c;求所有子矩形的权值和。 解题思路 考虑每个数字的贡献&#xff0c;对于相同的数字&#xff0c;产生贡献的右下角一定是一个若干…

Quartz.Net分布式任务管理平台(第二版)

前言&#xff1a;在Quartz.Net项目发布第一版Quartz.Net分布式任务管理平台后&#xff0c;有挺多园友去下载使用&#xff0c;我们通过QQ去探讨&#xff0c;其中项目中还是存在一定的不完善。所以有了现在这个版本。这个版本的编写完成其实有段时间了一直没有放上去。现在已经同…

【模拟】表达式求值(jzoj 1768)

表达式求值 jzoj 1768 题目大意&#xff1a; 有一个式子&#xff08;只含数字和加号乘号&#xff09;&#xff0c;让你求出结果的前四位 输入样例 输入样例#1 11*34输入样例#2 11234567890*1 输入样例#3 11000000003*1输出样例 输出样例#1 8输出样例#2 7891输出样例…

Gym101128J

Gym101128J 二分判断点是否在凸包内&#xff0c;模板更新 //Gym - 101128J #include <bits/stdc.h> #define rep(i,a,b) for(int ia;i<b;i) const double eps 1e-8; const double inf 1e20; const double pi acos(-1.0); const int maxp 10110; using namespace s…