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. 基于百度AI人脸识别技术的Demo

    编写demo之前首先浏览官方API:http://ai.baidu.com/docs#/Face-API/top 下面是源码: package com.examsafety.test; import ...

  2. ios27--kvo

    // // ViewController.h // 14-KVO的使用 #import <UIKit/UIKit.h> @interface ViewController : UIView ...

  3. go语言---for range

    学习-go语言坑之for range https://www.cnblogs.com/hetonghai/p/6718250.html go只提供了一种循环方式,即for循环,在使用时可以像c那样使用 ...

  4. 【BZOJ 5165】 树上倍增

    [题目链接] 点击打开链接 [算法] 树上倍增,时间复杂度 : O(qklog(n)) [代码] #include<bits/stdc++.h> using namespace std; ...

  5. E20170603-ts

    sanitize vt. 净化; 进行消毒; 使清洁; 审查; omission  n. 遗漏; 疏忽; 省略,删节; [法] 不履行法律责任; separator   n. 分离器,分离装置; 防胀 ...

  6. 小记 vue 打包(build)需要注意的一些事

    记录 vue 项目打包的一些事情 首先声明项目都是由 vue-cli 生成; vue 项目从 dev 切换到 prod 时有很多地方需要注意; 首先是大家最需要注意的 ajax 切换环节 以前一开始用 ...

  7. CSS左侧固定右侧自适应

    方法一: float + margin.left{ float: left; width: 100px; }.right {margin-left:100px; } /*清除浮动*/ .contain ...

  8. 【计蒜客习题】两仪剑法(gcd)

    两仪剑法是武当派武功的高级功夫,且必须 2 个人配合使用威力才大.同时该剑法招数变化太快.太多.设武当弟子甲招数变化周期为 n,武当弟子乙招数变化周期为 m,两弟子同时使用该剑法,当 2 人恰好同时达 ...

  9. [Usaco2011 Jan]道路和航线

    Description Farmer John正在一个新的销售区域对他的牛奶销售方案进行调查.他想把牛奶送到T个城镇 (1 <= T <= 25,000),编号为1T.这些城镇之间通过R条 ...

  10. ACM_同余+暴力找规律

    小光的忧伤 Time Limit: 2000/1000ms (Java/Others) Problem Description: 锴神:我尊重作者原意,你们出什么我就加什么.于是小光打了道水题(也就是 ...