HDU-6004-Periodical Cicadas
来源:互联网 发布:运营淘宝店要学什么 编辑:程序博客网 时间:2024/06/06 01:50
ACM模版
描述
题解
在
这里要求矩形区域中所有知了第一次同时出现的年数,我们可以先从两只知了考虑,设甲第一次出现、甲出现周期、甲出现的次数、甲出现的年数、乙第一次出现、乙出现周期、乙出现的次数、乙出现的年数为
因为想要两只同时出现,所以使
所以利用扩展欧几里得我们可以得到
考虑完两只知了的合并后,就可以考虑更多的合并了,其实我们完全可以将已经合并的两只看成一只,然后再与其他的进行合并,如此这般我们便能很容易获得到任意只知了同时出现的时间。
由于题目
现在来分析复杂度,首先预处理的复杂度是
除此之外,还有一个比较明显的问题便是
代码
#include <iostream>#include <algorithm>using namespace std;typedef long long ll;typedef __int128 lll;const int MAXN = 202;const int MAXM = MAXN * MAXN / 2 + MAXN;struct node{ ll a, b;} dp[MAXN][MAXM];int n, m, q;inline int _hash(int x, int y){ return (2 * m - x + 1) * x / 2 + y - x + 1;}ll exgcd(ll a, ll b, ll &x, ll &y){ if (b == 0) { x = 1; y = 0; return a; } ll ans = exgcd(b, a % b, x, y); ll t = x; x = y; y = t - a / b * y; return ans;}node merge(node x, node y){ if (x.a == -1 || y.a == -1) { return {-1, -1}; } ll _x, _y; ll g = exgcd(x.b, y.b, _x, _y); if ((y.a - x.a) % g) { return {-1, -1}; } ll t = (y.a - x.a) / g; lll p = x.a + (lll)x.b * _x * t; lll q = x.b / g * y.b; p = (p % q + q) % q; return {(ll)p, (ll)q};}void init(){ for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { for (int k = j + 1; k < m; k++) { dp[i][_hash(j, k)] = merge(dp[i][_hash(k, k)], dp[i][_hash(j, k - 1)]); } } }}int main(int argc, const char * argv[]){ int T; cin >> T; for (int ce = 1; ce <= T; ce++) { printf("Case #%d:\n", ce); scanf("%d%d", &n, &m); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { scanf("%lld", &dp[i][_hash(j, j)].a); } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { scanf("%lld", &dp[i][_hash(j, j)].b); } } init(); scanf("%d", &q); int x1, y1, x2, y2; while (q--) { scanf("%d%d%d%d", &x1, &y1, &x2, &y2); x1--; y1--; x2--; y2--; node ans = dp[x1][_hash(y1, y2)]; for (int i = x1 + 1; i <= x2; i++) { if (ans.a == -1) { break; } ans = merge(ans, dp[i][_hash(y1, y2)]); } printf("%lld\n", ans.a); } } return 0;}
- HDU-6004-Periodical Cicadas
- hdu 6004 Periodical Cicadas [2016 CCPC-Final F] [同余]
- HDU 6004 Periodical Cicadas(拓展欧几里得+预处理)
- CodeForces 215E Periodical Numbers 数位DP
- codeforces215 E. Periodical Numbers(数位dp)
- Ural 1558 - Periodical Numbers 写吐的水题...
- cheap kate spade bags White T shirt namely equitable favor white periodical pearly T shirt makes u
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- c++二维数组斜遍历,折线遍历
- 学习MultiViewAdapter——4
- CoordinatorLayout中使用WebView冲突
- sql
- 二分法——while等号
- HDU-6004-Periodical Cicadas
- 可变参数列表解析
- 201412-2 Z字形扫描 ccf
- js之初识函数
- 通达OA智能开发平台CRM系统 实现数据的自动计算
- 微信公众平台开发-消息管理-发送模板消息
- jdbc-(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)总结
- OpenPose+VS2015+Windows+CUDA8+cuDNN5.1 官方配置教程
- Ubuntu 16.04下安装CUDA8.0+Cudnn+Caffe