T1 [JZOJ3503] 粉刷

题目描述

  鸡腿想到了一个很高(sha)明(bi)的问题,墙可以看作一个N*M的矩阵,有一些格子是有污点的。现在鸡腿可以竖着刷一次,覆盖连续的最多C列,或者横着刷一次,覆盖连续的最多R行。现在鸡腿把墙上的情况告诉你,请你告诉鸡腿最少要刷多少次才能刷干净!

数据范围

  对于 $50\%$ 的数据,$1 \leq N,M \leq 5$

  对于 $100\%$ 的数据,$1 \leq N,M,R,C \leq 15$

分析

  临时换题什么鬼啊 还有本题正解暴力??

  枚举横着刷的所有情况,然后对于每种情况竖着刷完剩下的点

//结束前十分钟开始打 写得不是很好看
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 16 int n, m, r, c, ans = inf;
int sum[N], line[N];
char g[N][N]; void dfs(int x, int t, int last) {
if (last) {
int now = t;
for (int i = ; i <= m; i++)
if (sum[i]) i += c - , now++;
ans = min(ans, now);
}
if (x > n) return;
dfs(x + , t, );
for (int i = x; i <= x + r - && i <= n; i++)
for (int j = ; j <= m; j++)
if (g[i][j] == 'X') sum[j]--;
dfs(x + c, t + , );
for (int i = x; i <= x + r - && i <= n; i++)
for (int j = ; j <= m; j++)
if (g[i][j] == 'X') sum[j]++;
} int main() {
scanf("%d%d", &n, &m);
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++) {
scanf(" %c", &g[i][j]);
if (g[i][j] == 'X') sum[j]++, line[i]++;
}
scanf("%d%d", &r, &c);
dfs(, , );
printf("%d\n", ans); return ;
}

T2 [JZOJ3504] 运算符

题目描述

  鸡腿想到了一个很高(sha)明(bi)的运算符,那就是’!’,没错就是感叹号。他给了如下的定义:

  1、n!k = n!(k-1) * (n-1)!k (n > 0 and k > 0)

  2、n!k = 1 (n = 0)

  3、n!k = n (k = 0)

  现在鸡腿告诉你n和k你能告诉他n!k的不同约数个数有多少个吗?只要对1,000,000,009取模就可以了哦!

数据范围

  对于 $30\%$ 的数据,$0 \leq N \leq 10$,$0 \leq K \leq 10$

  对于 $100\%$ 的数据,$0 \leq N \leq 1000$,$0 \leq K \leq 100$

分析

  首先很容易发现对答案有贡献的只有 $(i,0) \; (1 \leq i \leq n)$

  有一种思路就是算出所有 $(i,0)$ 会出现的次数,然后就可以算出 $n!k$ 中所有质因子的次数

  由于 $(i,0)$ 只可能从 $(i,1)$ 转移过来,所以 $(i,0)$ 出现的次数就等于从 $(n,k)$ 转移到 $(i,0)$ 的不同操作顺序的种类

  每次操作可以让前面的数减一或者是后面的数减一,这就很像从矩形左上角走到右下角只能向右或向下走的不同路径总数

  前面的数一共要减 $n-i$ 次,后面的数一共要减 $k-1$ 次,所以总数为 $\binom{n-i+k-1}{k-1}$

  然后就是先埃氏筛出 $n$ 以内的质数,再把 $1 \sim n$ 的所有数质因数分解,将每项质因子次数乘上 $(i,0)$ 出现的次数计入质因子的总次数

  最后就是这个求因子个数的公式了 $f(n)= \prod_{i=1}^k (a_i+1)$

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 1005 int n, k, tot, p = 1e9 + ;
int prm[N], book[N];
ll c[N], inv[N], t[N], ans = ; void pre_Prm() {
for (int i = ; i <= n; i++)
if (!book[i]) {
prm[++tot] = i;
for (int j = ; i * j <= n; j++)
book[i * j] = ;
}
} void pre_C() {
inv[] = ; c[n] = ;
for (int i = ; i <= n; i++)
inv[i] = (p - p / i) * inv[p % i] % p;
for (int i = n - ; i; i--)
c[i] = (c[i + ] * (n - i + k - ) % p) * inv[n - i] % p;
} int main() {
scanf("%d%d", &n, &k);
pre_Prm(); pre_C();
for (int i = ; i <= n; i++)
for (int j = , k = i; j <= tot && k; j++) {
int sum = ;
while (!(k % prm[j])) k /= prm[j], sum++;
t[j] = (t[j] + sum * c[i] % p) % p;
}
for (int i = ; i <= tot; i++)
ans = ans * (t[i] + ) % p;
printf("%lld\n", ans); return ;
}

T3 [JZOJ6290] 倾斜的线

题目描述

数据范围

aaarticlea/png;base64,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" alt="" width="753" height="71" />

分析

  $O(n^2)$ 做法很简单,就是枚举所有斜率

  但实际上很多枚举的斜率对答案是不可能产生贡献的

  题目是要求出 $\vert \frac{y_2-y_1}{x_2-x_1}-\frac{P}{Q} \vert$ 的最小值

  将式子通分后得到 $\vert \frac{(Qy_2-Px_2)-(Qy_1-Px_1)}{Qx_2-Qx_1} \vert$

  我们会发现这很像一个斜率的表达式,此时的点坐标为 $(Qx,Qy-Px)$

  所以这道题就转化为了求这些点之间的斜率绝对值的最小值

  对于任意两个点,如果存在另一点在两者纵坐标之间,那么这两点之间的边一定不是绝对值最小的斜率

  这说明最优解一定是在所有纵坐标相邻点之间的斜率中

  这样就可以先按纵坐标排序,然后算出所有相邻点的斜率来更新答案

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 200005 int n;
ll P, Q, p, q;
double k = , lastk; struct Point {ll x, y; int num;} s[N], t[N]; ll gcd(ll a, ll b) {return !b ? a : gcd(b, a % b);} bool cmp(Point a, Point b) {return a.y < b.y;} double Abs(double x) {return x < ? -x : x;} double getk(Point a, Point b) {
return (double)(b.y - a.y) / (double)(b.x - a.x);
} int main() {
freopen("slope.in", "r", stdin);
freopen("slope.out", "w", stdout);
scanf("%d%d%d", &n, &P, &Q);
for (int i = ; i <= n; i++) {
scanf("%lld%lld", &s[i].x, &s[i].y);
t[i].x = Q * s[i].x;
t[i].y = Q * s[i].y - P * s[i].x;
t[i].num = i;
}
sort(t + , t + n + , cmp);
for (int i = ; i < n; i++) {
double nowk = Abs(getk(t[i], t[i + ]));
if (nowk < k) {
k = nowk;
p = s[t[i + ].num].y - s[t[i].num].y;
q = s[t[i + ].num].x - s[t[i].num].x;
lastk = getk(s[t[i].num], s[t[i + ].num]);
}
else if (nowk == k) {
nowk = getk(s[t[i].num], s[t[i + ].num]);
if (nowk < lastk) {
lastk = nowk;
p = s[t[i + ].num].y - s[t[i].num].y;
q = s[t[i + ].num].x - s[t[i].num].x;
}
}
}
p = Abs(p); q = Abs(q);
ll g = gcd(p, q);
printf("%lld/%lld\n", p / g, q / g); return ;
}

最新文章

  1. 图片下方出现多3px的原因及解决方法
  2. angularJs 指令的理解
  3. Dream It Possible
  4. winfrom调用FastReport模板
  5. 在Python中实现PageFactory模式
  6. wex5 开机图片时间长
  7. Android学习笔记(六)
  8. _EPROCESS结构简单了解!
  9. wc之上传图片
  10. Python中的random模块
  11. ecshop 函数列表大全
  12. 【HDOJ】3006 The Number of set
  13. hql中不能写count(1)能够写count(a.id)
  14. R的变量类型和常用函数
  15. css小随笔
  16. 如何修改select标签的默认下拉箭头样式?
  17. VS中Release模式下生成去掉生成pdb文件
  18. Python全栈考试(一)
  19. Python-字符串及列表操作-Day2
  20. [Swift]LeetCode4. 两个排序数组的中位数 | Median of Two Sorted Arrays

热门文章

  1. Bash脚本编程学习笔记07:循环结构体
  2. 详细讲解Codeforces Round #624 (Div. 3) F. Moving Points
  3. Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set…
  4. JAVA JDK keytool 生成数字证书
  5. 09、const与extern在一起跨文件引用
  6. 转:Laravel 项目开发规范
  7. 使用 Express 脚手架
  8. WebApp开发-Zepto
  9. [PAT] A1018 Public Bike Management
  10. List&lt;SelectListItem&gt; 转为 SelectList