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: ...
随机推荐
- 20160225.CCPP体系具体解释(0035天)
程序片段(01):CircleList.h+CircleList.c+main.c 内容概要:环形链表 ///CircleList.h #pragma once #include <stdio. ...
- [办公应用]如何制作二Y轴图(excel)
有时候我们会遇到一种图表,就是X轴一致,可是Y轴的数据相差很大.如下图中,年龄和收入就不是一个数量级,在图表中显示的时候,“年龄”的曲线根本看不到(表中数据仅供举例): 解决的方法就是使用双Y轴显示, ...
- 2016/1/14 java随机数生成
1.Math库里的static(静态)方法random() 该方法的作用是产生0到1之间(包括0,但不包括1)的一个double值. double rand = Math.random(); 2.通过 ...
- Codeforces Round #323 (Div. 2) D. Once Again... 暴力+最长非递减子序列
D. Once Again... You a ...
- FileStream StreamWriter StreamReader BinaryReader
FileStream vs/differences StreamWriter? http://stackoverflow.com/questions/4963667/filestream-vs-dif ...
- SQL SERVER 安装软件 及导入项目流程
1.安装sqlsever2000及以上 数据库 (在百度上找安装文档) 创建账户 密码 2.解压SQL2000-KB884525-SP4-x86-CHS.EXE补丁 之后安装补丁 ,在安装补丁是会用到 ...
- 转 source insight 复制后光标在前面
source insight 里编辑的时候,每次粘贴后,光标停留在粘贴内容的前面. 我想把它设定为 粘贴后,光标移动倒粘贴内容的后面. 怎么做? 这是个设置问题,按照下面的步骤设定就可以了. Opti ...
- WP8 中使用HTML Agility Pack与友盟分享SDK遇到的 System.Xml.XPath加载问题
今晚在尝试使用友盟最新的社交分享SDK时,按照官方Demo,并未做多少多少改动,就是去除了对微信.脸书和推特的分享.然后运行之后就一直报错 : {System.IO.FileLoadException ...
- 14. extjs中treepanel属性和方法
转自:http://www.cnblogs.com/connortang/p/4414907.html 1.Ext.tree.TreePanel 主要配置项: root:树的根节点. rootVisi ...
- 0629-TP整理四(create(),success(),error(),U())
create()-前提:表单中name的值要与数据库中的字段一一匹配 可直接获取表单数据进行操作: 作用:将数据库中没有的字段在数组中去除. PHP中添加的语法如下: success()和error( ...