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: ...
随机推荐
- SpringMVC学习指南-Spring框架
Spring框架主要使用依赖注入.实际上,很多牛叉的框架如Google的Guice都是使用依赖注入. ------------------------------------------------- ...
- Flask 解析 Web 端 请求 数组
Web前台由 JavaScript 通过Ajax发送POST请求,当请求数据为数组时,Python Flask 做服务器时的解析如下: js: var ids = []; for (var i = 0 ...
- [Java] 监控java对象回收的原理与实现
监控Java对象回收的原理与实现 一.监控Java对象回收的目的 监控Java对象是否回收的目的是:为了实现内存泄露报警. 内存泄露是指程序中对象生命周期(点击查看详情)已经进入不可见阶段,但因为编码 ...
- 【Android】自己定义View
翻译自:http://developer.android.com/training/custom-views/index.html 一)创建view类 一个设计良好的自己定义view与其它的类一样.它 ...
- CSS设置元素居中的方法
1.margin:0 auto; 2.body{text-align:center;} 3.position:absolute; left:50%; margin-left:-(宽/2);
- vim升级到8.0
1.卸载 sudo apt-get remove --purge vim 2.添加8.0的vim源并安装 sudo add-apt-repository ppa:jonathonf/vim sudo ...
- 【Silverlight】Bing Maps学习系列(二):通过Bing Maps Silverlight Control如何显示地图(转)
[Silverlight]Bing Maps学习系列(二):通过Bing Maps Silverlight Control如何显示地图 如本系列第一篇你所介绍的,开发基于Silverlight的Bin ...
- Java 工具类 —— 定时器(Timer/TimerTask)
import java.util.Timer; import java.util.TimerTask; public class Timer { .... public void schedule(T ...
- 假如Java对象是个人······
假如Java对象是个人,那意味着它也具备了我们人所有的东西,头,身体,大长腿. 头 头就是我们的对象头(Header).根据JAVA虚拟机规范,我们的对象头分为两部分,分别是存储对象自身的运行时数据和 ...
- BZOJ_3133_[Baltic2013]ballmachine_堆+倍增
BZOJ_3133_[Baltic2013]ballmachine_堆+倍增 Description 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树 ...