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的更多相关文章

  1. HDU多校Round 8

    Solved:2 rank:141 D. Parentheses Matrix n,m有一个小于6的时候是一种构造方法 答案是n + (m - 2) / 2 (n > m) 都大于6的时候 可以 ...

  2. HDU多校Round 7

    Solved:2 rank:293 J. Sequense 不知道自己写的什么东西 以后整数分块直接用 n / (n / i)表示一个块内相同n / i的最大i #include <bits/s ...

  3. HDU多校Round 6

    Solved:2 rank:452 I. Werewolf 没有铁人 找铁狼 如果一个环中只有一条狼人边那个人就是铁狼 说铁狼是好人的人也是铁狼 #include <bits/stdc++.h& ...

  4. HDU多校Round 5

    Solved:3 rank:71 E. Everything Has Changed #include <bits/stdc++.h> using namespace std; const ...

  5. HDU多校Round 3

    Solved:4 rank:268 C. Dynamic Graph Matching  状压DP一下 #include <stdio.h> #include <algorithm& ...

  6. HDU多校Round 1

    Solved:5 rank:172 A.Maximum Multiple #include <stdio.h> #include <algorithm> #include &l ...

  7. hdu 5667 BestCoder Round #80 矩阵快速幂

    Sequence  Accepts: 59  Submissions: 650  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 65536 ...

  8. hdu 5643 BestCoder Round #75

    King's Game  Accepts: 249  Submissions: 671  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 6 ...

  9. hdu 5641 BestCoder Round #75

    King's Phone  Accepts: 310  Submissions: 2980  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: ...

随机推荐

  1. WCF探索之旅(五)——WCF与WebService的异同

    前几篇文章我们简单的介绍了WCF以及怎样使用它,今天我们来讨论一下WCF和WebService的异同. 相信大多数同学跟我一样,对于WebService有所了解.并且应该说你是先听说WebServic ...

  2. hdu 1258 Sum It Up (dfs+路径记录)

    pid=1258">Sum It Up Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  3. C/C++生成可执行文件过程

    编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序.编译的 ...

  4. (七)Java 变量类型

    Java 变量类型 在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: type identifier [ = value][, identifier [= value] ...] ...

  5. 【bzoj2728】[HNOI2012]与非

    先打出nand表 0 nand 0=1 1 nand 1=0 0 nand 1=1 1 nand 0=1   容易发现(!a)=a nand a 然后(a&b)=!(a nand b) 然后( ...

  6. go7---map

    package main /* map 类似其它语言中的哈希表或者字典,以key-value形式存储数据 Key必须是支持==或!=比较运算的类型,不可以是函数.map或slice, 这3中类型都不能 ...

  7. 00020970-0000-0000-C000-000000000046

    00020970-0000-0000-C000-000000000046 System.InvalidCastException: 无法将类型为“Microsoft.Office.Interop.Wo ...

  8. python-----截取xml文件画框的图片并保存

    from __future__ import division import os from PIL import Image import xml.dom.minidom import numpy ...

  9. Netty,Thrifty

    小白科普:Netty有什么用? https://mp.weixin.qq.com/s/PTKnRQ_hLf8BBPYnywLenA Thrifty 是基于.net Attribute 实现了标准 Th ...

  10. 学生党的Surface Pro 5乞丐版使用体验

    因为已经装了台式机,大一开学时买的厚重且续航差的华硕游戏本(i5+GTX950M+8G)对我这个考研党已经显得不合适了.恰巧有一同学笔记本坏了,我便将游戏本低价出了,然后用两三倍的价格,入手了surf ...