HDU5794 - A Simple Chess

HDU5794 - A Simple Chess


做法:首先的想法就是用总方案数减去,经过过障碍的方案数A。第一个思路就是容斥,但是显然不符合数据规模。另一个思路就是将障碍物从左上到右下排序,dp[i] 表示不经过前i-1个障碍,到达第i个障碍的方案数。这里定义cal(a,b) 表示从a到b,无障碍情况下的方案数,a[i]是排序后的第i个点,起点st,终点ed,pre(a)表示能到达a的点集。那么 \(A = \sum_{i=1}^n dp[i]*cal(a[i],ed)\),现在考虑转移,dp[i] 就是 到达pre(a[i])中每个点的不经过任何障碍的方案数的和,而这个值与答案类似可以通过用总方案减去,之前经过过障碍的方案数,这些dp值已经求出来了,直接转移即可。cal(a,b) 中需要注意组合数的计算过程。lucas实现的时候没有判n和m的正负,RE了很长一段时间。。

#include <cstdio>
#include <algorithm>
typedef long long ll;
const int mod = 110119;
using namespace std;
ll n, m, dp[111], tmp, ans;
int r;
ll f[mod], rv[mod];
ll C(ll n, ll m) {return n < m ? 0: f[n]*rv[n-m]%mod*rv[m]%mod;
}
ll lucas(ll n, ll m) {if(n<m || n < 0 || m < 0) return 0;ll ans=1;for(; m; n/=mod, m/=mod) ans = ans*C(n%mod, m%mod)%mod;return ans;
}
struct node {ll x, y;node(){}node(ll _x, ll _y) {x = _x; y = _y;}
}a[111];
bool cmp(node a,node b) {return (a.x + a.y) <= (b.x + b.y);
}
int inb(node a) {if(a.x < 1 || a.x > n || a.y < 1 || a.y > m) return 0;return 1;
}
node pre1(node a) {return node(a.x-2LL,a.y-1LL);
}
node pre2(node a) {return node(a.x-1LL,a.y-2LL);
}
ll cal(node a, node b) {if( !inb(a) || !inb(b) ) return 0;ll x = b.x - a.x + 1, y = b.y - a.y + 1;if(x == 1 && y == 1) return 1;if( !inb(node(x,y)) ) return 0;if(x + y - 2 < 0) return 0;if( (x+y-2)%3 ) return 0;ll k = (x+y-2)/3LL;ll num = x-k-1;return lucas(k, num);
}
int main() {rv[0] = rv[1] = f[0] = f[1] = 1;for(int i = 2; i < mod; ++i) {f[i] = f[i-1]*i % mod; rv[i] = -rv[mod%i]*(mod/i)%mod;while(rv[i] < 0) rv[i] += mod;}for(int i = 2; i < mod; ++i) rv[i] = rv[i]*rv[i-1]%mod;int C = 0;while(scanf("%lld %lld %d", &n, &m, &r) != EOF) {for(int i = 1; i <= r; ++i) scanf("%lld %lld", &a[i].x, &a[i].y);sort(a+1, a+1+r, cmp);ans = cal(node(1,1), node(n,m));for(int i = 1; i <= r; ++i) {dp[i] = tmp = 0;for(int j = 1; j < i; ++j) {tmp += dp[j]*cal(a[j],pre1(a[i]))%mod;tmp += dp[j]*cal(a[j],pre2(a[i]))%mod;tmp %= mod;}dp[i] = cal(node(1,1), pre1(a[i]))%mod + cal(node(1,1), pre2(a[i]))%mod - tmp;((dp[i]%=mod) += mod)%=mod;ans -= dp[i]*cal(a[i],node(n,m))%mod;((ans%=mod) += mod)%=mod;}printf("Case #%d: %lld\n",++C,ans);}return 0;
}

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

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

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

相关文章

P1829-[国家集训队]Crash的数字表格/JZPTAB【莫比乌斯反演】

正题 题目链接:https://www.luogu.com.cn/problem/P1829 题目大意 给出n,mn,mn,m求∑i1n∑j1mlcm(i,j)\sum_{i1}^n\sum_{j1}^mlcm(i,j)i1∑n​j1∑m​lcm(i,j) 解题思路 ∑i1n∑j1mijgcd(i,j)\sum_{i1}^n\sum_{j1}^m\frac{ij}{gcd(i,j)}i1∑n​j1∑m​gcd(i,j)ij​ ∑x1nx(∑…

.NET Core开发日志——配置

熟悉ASP.NET的开发者一定对web.config文件不陌生。在ASP.NET环境中&#xff0c;要想添加配置参数&#xff0c;一般也都会在此文件中操作。其中最常用的莫过于AppSettings与ConnectionStrings两项。而要在代码中获得文件中的配置信息&#xff0c;ConfigurationManager则是必不可…

【模拟】杯子

杯子 题目大意&#xff1a; 有n个1&#xff0c;现在可以将两个相同的数加在一起&#xff0c;使数字个数-1&#xff0c;现在要将数字个数控制在k以下&#xff08;包括k&#xff09;&#xff0c;但可能要多加几个1&#xff0c;现在问你最少加多少个1 输入样例#1 3 1 输出样例…

操作集锦【牛客网】 牛客练习赛60

题目传送 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 有一款自走棋有26种操作,每种操作我们都用a,b,c,d,…,x,y,z的符号来代替. 现在牛牛有一个长度为nnn的操作序列,他现…

[2020.11.3NOIP模拟赛]选数字【容斥】

正题 题目链接:https://www.luogu.com.cn/problem/U138404?contestId36493 题目大意 nnn个数字&#xff0c;每次询问一个区间有多少个三对数或为xxx。 解题思路 首先显然这些数都不能有xxx没有的位数&#xff0c;那么我们选择的数都得是被xxx包含的&#xff0c;这些数的数量…

Codeforces 1054D Changing Array

Codeforces 1054D Changing Array 做法&#xff1a;给定一个序列&#xff0c;每个数可以把在2进制k位下取反&#xff0c;也可以不变&#xff0c;在改变后&#xff0c;这个序列异或和不为0的区间的个数。考虑如何求出尽可能少的异或为0的序列&#xff0c;对序列求前缀之后&#…

解决C# 7.2中的结构体性能问题

在某些使用了readonly关键字的情况下&#xff0c;C#编译器会创建出结构体的防御副本。虽然这个问题已经众所周知并被记录下来了&#xff0c;但仍然值得重新审视&#xff0c;因为它与C# 7.2的几个特性有关。in和ref readonly关键字的使用让这个问题出现得更频繁&#xff0c;而re…

【DP】玩具

玩具 题目大意&#xff1a; 有n个物品&#xff0c;每个物品有自己的代价&#xff0c;相邻的物品不能同时购买&#xff0c;现在有m元&#xff0c;问最多买多少件物品 输入样例 3 8 4 4 5 输出样例 1 数据范围 对于30%的数据&#xff0c;n≤10&#xff1b; 对于60%的数据&…

P4867-Gty的二逼妹子序列【平衡结合,莫队,分块】

正题 题目链接:https://www.luogu.com.cn/problem/P4867 题目大意 一个序列要求支持询问一个区间[l,r][l,r][l,r]内在[a,b][a,b][a,b]之间有多少种不同的权值。 解题思路 首先我们需要莫队&#xff0c;考虑用什么数据结构&#xff0c;如果我们使用线段树&#xff0c;那么复杂…

Mail.Ru Cup 2018 Round 2

Mail.Ru Cup 2018 Round 2 C. Lucky Days 题意&#xff1a;找出最长的一段连续区间&#xff0c;同时被\([l_a k_at_a, r_a k_at_a]\) , \([l_b k_bt_b, r_b k_bt_b]\)覆盖。 做法&#xff1a;设最终的答案为\([L,R]\),那么\(L\)一定是\(l_a k_at_a,~~ l_b k_bt_b\), \(R\…

使用ML.NET实现基于RFM模型的客户价值分析

RFM模型在众多的客户价值分析模型中&#xff0c;RFM模型是被广泛应用的&#xff0c;尤其在零售和企业服务领域堪称经典的分类手段。它的核心定义从基本的交易数据中来&#xff0c;借助恰当的聚类算法&#xff0c;反映出对客户较为直观的分类指示&#xff0c;对于没有数据分析和…

【模拟】【递归】【dfs】恐怖的奴隶主

恐怖的奴隶主 题目大意&#xff1a; 有4个bigbob&#xff08;我们简称BB&#xff09;&#xff0c;每个BB有自己的初始血量&#xff08;最大为k&#xff09;&#xff0c;当某个BB死后&#xff0c;其他受伤的BB会在最左边的空格召唤一个最大血量为s[t]的BB&#xff08;t为当前受…

[2020.11.4NOIP模拟赛]简单的打击【NTT】

正题 题目链接:https://www.luogu.com.cn/problem/U138580 题目大意 两个长度为nnn的序列&#xff0c;要求重排后同位置的相加后众数的个数最多。 解题思路 定义aia_iai​为第一个序列中iii的出现次数&#xff0c;那么同理有bbb 不难对于每个众数iii的出现次数cic_ici​&…

Reordering the Cows

牛客网传送 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format:%lld 链接&#xff1a;https://ac.nowcoder.com/acm/contest/4860/B 来源&#xff1a;牛客网 题目描述 Farmer John’s N cows (…

Educational Codeforces Round 54 (Rated for Div.2)

Educational Codeforces Round 54 (Rated for Div.2) D. Edge Deletion 题意&#xff1a;一张n个点的无向图&#xff0c;保留其中k条边&#xff0c;使得有尽可能多的点与1的最短路长度不变。 做法&#xff1a;求出最短路树&#xff0c;然后自底向上删边即可。 #include <bit…

回顾4180天在腾讯使用C#的历程,开启新的征途

今天是2018年8月8日&#xff0c;已经和腾讯解除劳动关系&#xff0c;我的公司正式开始运营&#xff0c;虽然还有很多事情需要理清&#xff0c;公司官网也没有做&#xff0c;接下来什么事情都需要自己去完成了&#xff0c;需要一步一个脚印去完善&#xff0c;开启一个新的征途。…

【dfs】【拓扑排序】组合树

组合树 题目大意&#xff1a; 有一棵树&#xff0c;每个点都有自己的原颜色和目标颜色&#xff08;黑或白&#xff09;&#xff0c;现在深度不小于k的点可以让自己祖宗k代k个点的颜色全部取反&#xff0c;现在问当前树是否能变成目标树 输入样例 2 3 2 1 2 2 3 0 0 0 1 0 1…

P5906-[模板]回滚莫队不删除莫队

正题 题目链接:https://www.luogu.com.cn/problem/P5906 题目大意 nnn个数字&#xff0c;mmm个询问[l,r][l,r][l,r]中最远的相同数字对。 解题思路 我们考虑如何用莫队维护&#xff0c;对于一个询问[l,r][l,r][l,r]&#xff0c;我们先按照lll的块排再按照rrr排&#xff0c;定…

Secret Code(原题和变形题)

洛谷传送 牛客网题一 牛客网题二 没错牛客网有两个题&#xff0c;牛客网题一和洛谷是一样的题&#xff0c;牛客网题二是题一的变形 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 链…

Codeforces Round #520 (Div. 2)

Codeforces Round #520 (Div. 2) D. Fun with Integers 题意&#xff1a;a与b之间有边&#xff0c;当且仅当存在一个\(x\)使得\(a*b x\)或 \(a*x b\)&#xff0c;这条边的边权为\(|x|\)&#xff0c;保证\(|a|,|b|,|x|<n\)&#xff0c;问一条最长的不走重复边的路径的长度是…