HDU多校Round 4
Solved:3
rank:405.................................
B. Harvest of Apples
知道了S(n,m) 可以o(1)的求S(n - 1, m),S(n + 1,m),S(n,m - 1),S(n,m + 1) 天秀莫队
- #include <stdio.h>
- #include <algorithm>
- #include <iostream>
- using namespace std;
- typedef long long ll;
- const ll mod = 1e9 + ;
- int blo = ;
- ll ans;
- ll f[];
- ll inv[];
- ll anss[];
- ll pow_mod(ll x, ll y)
- {
- ll res = ;
- while(y)
- {
- if(y & ) res = res * x % mod;
- x = x * x % mod;
- y >>= ;
- }
- return res;
- }
- void prework()
- {
- f[] = ; inv[] = ;
- for(int i = ; i <= ; i++) f[i] = f[i - ] * 1LL * i % mod;
- for(int i = ; i <= ; i++) inv[i] = pow_mod(f[i], mod - 2LL);
- }
- struct node
- {
- int n, m, id;
- }E[];
- bool cmp(node A, node B)
- {
- int a = (A.n - ) / blo;
- int b = (B.n - ) / blo;
- if(a == b) return A.m < B.m;
- else return a < b;
- }
- int main()
- {
- ans = ;
- prework();
- int T;
- scanf("%d", &T);
- for(int i = ; i <= T; i++)
- {
- scanf("%d%d", &E[i].n, &E[i].m);
- E[i].id = i;
- }
- sort(E + , E + + T, cmp);
- ll n = , m = ;
- for(int i = ; i <= T; i++)
- {
- while(n < E[i].n)
- {
- ans *= 2LL;
- ll tmp = f[n] * inv[m] % mod * inv[n - m] % mod;
- ans = (ans - tmp + mod) % mod;
- n++;
- }
- while(m > E[i].m)
- {
- ll tmp = f[n] * inv[m] % mod * inv[n - m] % mod;
- ans = (ans - tmp + mod) % mod;
- m--;
- }
- while(n > E[i].n)
- {
- ll tmp = f[n - ] * inv[m] % mod * inv[n - - m] % mod;
- ans += tmp;
- ans = ans * inv[] % mod;
- n--;
- }
- while(m < E[i].m)
- {
- ll tmp = f[n] * inv[m + ] % mod * inv[n - m - ] % mod;
- ans = (ans + tmp) % mod;
- m++;
- }
- anss[E[i].id] = ans;
- }
- for(int i = ; i <= T; i++) printf("%lld\n", anss[i]);
- return ;
- }
D. Nothing is Impossible
题意出锅 秒变签到题
- #include <stdio.h>
- #include <algorithm>
- #include <iostream>
- #include <string.h>
- using namespace std;
- typedef long long ll;
- struct node
- {
- int a, b;
- }E[];
- bool cmp(node A, node B)
- {
- return A.b < B.b;
- }
- int main()
- {
- int T;
- scanf("%d", &T);
- while(T--)
- {
- int n, m;
- scanf("%d%d", &n, &m);
- for(int i = ; i <= n; i++) scanf("%d%d", &E[i].a, &E[i].b);
- sort(E + , E + + n, cmp);
- ll tmp = ;
- int ans = n;
- for(int i = ; i <= n; i++)
- {
- if(tmp * (E[i].b + 1LL) <= m)
- {
- tmp *= (E[i].b + 1LL);
- }
- else
- {
- ans = i - ;
- break;
- }
- }
- printf("%d\n", ans);
- }
- return ;
- }
J. Let Sudoku Rotate
玄学剪纸 把一个矩阵翻转的话就考虑换一种方法遍历 转四次相当于转一圈 dfs回来的时候要恢复状态
- #include <stdio.h>
- #include <algorithm>
- #include <iostream>
- #include <cmath>
- #include <string.h>
- using namespace std;
- int ans;
- int num[][];
- int tmp[][];
- int vis[];
- int cal(char x)
- {
- if(x - '' >= && x - '' <= ) return x - '';
- else return + x - 'A';
- }
- void rotate(int x, int y)
- {
- int ix = x * - ;
- int iy = y * - ;
- for(int i1 = ix, i2 = iy; i2 <= iy + ; i2++, i1++)
- for(int j1 = iy, j2 = ix + ; j2 >= ix; j1++, j2--)
- tmp[i1][j1] = num[j2][i2];
- for(int i = ix; i <= ix + ; i++)
- for(int j = iy; j <= iy + ; j++)
- num[i][j] = tmp[i][j];
- }
- bool check(int x, int y)
- {
- int ix = x * - ;
- int iy = y * - ;
- for(int i = ix; i <= ix + ; i++)
- {
- memset(vis, , sizeof(vis));
- for(int j = ; j <= y * ; j++)
- {
- if(vis[num[i][j]]) return false;
- vis[num[i][j]] = ;
- }
- }
- for(int j = iy; j <= iy + ; j++)
- {
- memset(vis, , sizeof(vis));
- for(int i = ; i <= x * ; i++)
- {
- if(vis[num[i][j]]) return false;
- vis[num[i][j]] = ;
- }
- }
- return true;
- }
- void dfs(int x, int y, int st)
- {
- if(x == )
- {
- ans = min(ans, st);
- return;
- }
- for(int i = ; i <= ; i++)
- {
- if(i != ) rotate(x, y);
- if(check(x, y))
- {
- if(y != ) dfs(x, y + , st + i);
- else dfs(x + , , st + i);
- }
- }
- rotate(x, y);
- }
- int main()
- {
- int T;
- scanf("%d", &T);
- while(T--)
- {
- ans = ;
- for(int i = ; i <= ; i++)
- {
- char s[]; scanf("%s", s + );
- for(int j = ; j <= ; j++) num[i][j] = cal(s[j]);
- }
- dfs(, , );
- printf("%d\n", ans);
- }
- return ;
- }
K. Expression in Memories
- #include <stdio.h>
- #include <algorithm>
- #include <iostream>
- #include <string.h>
- using namespace std;
- char s[];
- int vis[];
- int main()
- {
- int T;
- scanf("%d", &T);
- while(T--)
- {
- memset(vis, , sizeof(vis));
- scanf("%s", s);
- int len = strlen(s);
- bool f = true;
- for(int i = ; i < len; i++)
- {
- if(s[i] == '+')
- {
- if(i == || i == len - ) f = false;
- if(i + < len && s[i + ] == '+') f = false;
- if(i + < len && s[i + ] == '*') f = false;
- }
- else if(s[i] == '*')
- {
- if(i == || i == len - ) f = false;
- if(i + < len && s[i + ] == '+') f = false;
- if(i + < len && s[i + ] == '*') f = false;
- }
- else if(s[i] - '' > && s[i] - '' <= ) vis[i] = ;
- else if(s[i] == '')
- {
- if(i - >= && vis[i - ] == ) vis[i] = ;
- else
- {
- if(i + < len && s[i + ] - '' >= && s[i + ] - '' <= ) f = false;
- else if(i + < len && s[i + ] == '?') s[i + ] = '+';
- }
- }
- else if(s[i] == '?')
- {
- if(i == || i + == len) s[i] = '', vis[i] = ;
- else if(i - >= && vis[i - ] == )
- {
- if(s[i - ] == '') s[i] = '+';
- else s[i] = '', vis[i] = ;
- }
- else
- {
- s[i] = '', vis[i] = ;
- }
- }
- }
- if(!f) puts("IMPOSSIBLE");
- else printf("%s\n", s);
- }
- return ;
- }
L. Graph Theory Homework
- #include <stdio.h>
- #include <algorithm>
- #include <iostream>
- #include <cmath>
- using namespace std;
- int q[];
- int main()
- {
- int T;
- scanf("%d", &T);
- while(T--)
- {
- int n;
- scanf("%d", &n);
- for(int i = ; i <= n; i++) scanf("%d", &q[i]);
- int ans = sqrt(abs(q[n] - q[]));
- printf("%d\n", ans);
- }
- return ;
- }
HDU多校Round 4的更多相关文章
- HDU多校Round 8
Solved:2 rank:141 D. Parentheses Matrix n,m有一个小于6的时候是一种构造方法 答案是n + (m - 2) / 2 (n > m) 都大于6的时候 可以 ...
- HDU多校Round 7
Solved:2 rank:293 J. Sequense 不知道自己写的什么东西 以后整数分块直接用 n / (n / i)表示一个块内相同n / i的最大i #include <bits/s ...
- HDU多校Round 6
Solved:2 rank:452 I. Werewolf 没有铁人 找铁狼 如果一个环中只有一条狼人边那个人就是铁狼 说铁狼是好人的人也是铁狼 #include <bits/stdc++.h& ...
- HDU多校Round 5
Solved:3 rank:71 E. Everything Has Changed #include <bits/stdc++.h> using namespace std; const ...
- HDU多校Round 3
Solved:4 rank:268 C. Dynamic Graph Matching 状压DP一下 #include <stdio.h> #include <algorithm& ...
- HDU多校Round 1
Solved:5 rank:172 A.Maximum Multiple #include <stdio.h> #include <algorithm> #include &l ...
- hdu 5667 BestCoder Round #80 矩阵快速幂
Sequence Accepts: 59 Submissions: 650 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...
- hdu 5643 BestCoder Round #75
King's Game Accepts: 249 Submissions: 671 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 6 ...
- hdu 5641 BestCoder Round #75
King's Phone Accepts: 310 Submissions: 2980 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
随机推荐
- MySQL 中间层 Atlas MySQL
Atlas MySQL 详细介绍 Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0. ...
- Android一些网站介绍
1.开源镜像: Android SDK在线更新镜像服务器 中国科学院开源协会镜像站地址: IPV4/IPV6: http://mirrors.opencas.cn 端口:80 IPV4/IPV6: h ...
- (一)Java 入门教程
Java 入门教程 Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言. Java可运行于多个平台,如Windows, Mac OS,及其他多种UNIX版本的系统 ...
- HDU 5000 2014 ACM/ICPC Asia Regional Anshan Online DP
Clone Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/65536K (Java/Other) Total Submiss ...
- 【Dairy】2016.10.23 观火&中彩记
...................... 就第一条可以! 观火10分钟,长郡附近老房子起火...
- [POI2012]FES-Festival
https://www.zybuluo.com/ysner/note/1252538 题面 有一个数列\(\{a\}\).现给定多组限制,限制分成\(2\)类,第一类是\(a_x+1=a_y\),有\ ...
- 配置URL
- PHP面向对象技术(全面讲解)
作者:高洛峰 来源:<PHPer>杂志 1.面向对象的概念 面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机 ...
- datatable-bootstrap 基本配置
function doSearch() { if(dtable!=null){ dtable.fnClearTable(0); dtable.fnDraw(); // 重新加载数据 }else{ dt ...
- 398 Random Pick Index 随机数索引
给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引. 您可以假设给定的数字一定存在于数组中.注意:数组大小可能非常大. 使用太多额外空间的解决方案将不会通过测试.示例:int[] num ...