[LibreOJ β Round]ZQC的拼图

402人阅读 评论(0) 收藏 举报
分类:

题目描述

ZQC 和他的妹子在玩拼图。她们有 n (1≤n≤100) n \ (1 \leq n \leq 100) n (1≤n≤100) 块神奇的拼图,还有一块拼图板。拼图板是一个 m×m (1≤m≤100) m \times m \ (1 \leq m \leq 100) m×m (1≤m≤100) 的正方形网格,每格边长为 1,如图所示。每块拼图都是直角三角形,正面为白色,反面为黑色,拼图放在拼图板上时,必须正面朝上,直角顶点必须与拼图板上的一个格点重合,两条直角边分别向左和向下。拼图可以重叠在一起。拼图的左下部分可以超过拼图板的边界,如图所示。

这些拼图有一个好,就是能伸缩,当然,拼图伸缩是要按基本法来的,具体说来就是:你可以选择一个正整数 kkk,并使所有拼图的每条边长都变成原来的 kkk 倍。

妹子摆好拼图后,ZQC 需要控制一个小人从拼图板的左下角跑到右上角,小人路线上的任何一点(包括端点)都要在某块拼图板上(边界或顶点也可以),现在 ZQC 想知道他的妹子最少要把拼图的边长扩大到原来的几倍才存在一种摆放方式使得他能找到这样一条路线。

DP

我们二分答案k,然后尝试判定。
对于一块拼图,如果直角顶点放在(x,y),能覆盖那些(x-x’,y-y’)呢?
我们不妨对于这个拼图的每一行选择最大的y’,这样得到n个(x’,y’)。
现在问题变成分组背包,每组至多选择一个二元组,使得第一维和为m,第二维和>=m。
就是这样。

#include<cstdio>
#include<algorithm>
#include<cmath>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
typedef double db;
const int maxn=100+10;
int f[maxn][maxn],a[maxn],b[maxn];
int i,j,k,l,r,mid,t,n,m;
db x,y;
bool check(int ans){
    fo(i,0,n)
        fo(j,0,m)
            f[i][j]=-1000000000;
    f[0][0]=0;
    fo(i,1,n){
        fo(j,0,min(ans/b[i],m)){
            x=(db)ans/a[i];
            //y=(db)((db)ans/b[i]-j)*((db)ans/a[i])/((db)ans/b[i]);
            y=(db)b[i]/a[i]*((db)ans/b[i]-(db)j);
            t=floor(y);
            fo(k,j,m)
                f[i][k]=max(f[i][k],f[i-1][k-j]+t);
        }
    }
    if (f[n][m]>=m) return 1;else return 0;
}
int main(){
    scanf("%d%d",&n,&m);
    fo(i,1,n) scanf("%d%d",&a[i],&b[i]);
    l=1;r=200000000;
    while (l<r){
        mid=(l+r)/2;
        if (check(mid)) r=mid;else l=mid+1;
    }
    printf("%d\n",l);
}
查看评论

LibreOJ #505.「LibreOJ β Round」ZQC 的游戏 网络流

题意分析比赛的时候唯一一道想出来的题。。。直接网络流就好了。没啥好说的。代码#include #include #include #include #include #include using na...
  • qq_33229466
  • qq_33229466
  • 2017-06-17 08:07:21
  • 313

[LibreOJ β Round]ZQC的树列

题目描述见LOJ。做法显然对于每一段数字,要么可选要么必选。 假如有t个,若必选,则方案为2^t-1,否则为2^t。 因此只有1、2、3就可以构造所有情况。 尝试把n拆分成2^t-1以及2^t的...
  • WerKeyTom_FTD
  • WerKeyTom_FTD
  • 2017-06-17 15:31:55
  • 396

[LibreOJ β Round]ZQC的课堂

题目描述https://www.loj.ac/problem/503题解x和y是可以分开考虑的。 设si表示某维坐标的前缀和。 要求统计多少i满足si*si-1=0且min(si,si-1)...
  • WerKeyTom_FTD
  • WerKeyTom_FTD
  • 2017-06-19 16:36:53
  • 333

LibreOJ #503.「LibreOJ β Round」ZQC 的课堂 线段树

题意 分析 貌似这是第一次在oj上拿rank1的说。。。 显然两维之间是互不相关的,我们可以把每一维分开处理。 对于一维向量数组a[1..n]a[1..n],对其求前缀和,设为s[...
  • qq_33229466
  • qq_33229466
  • 2018-01-23 16:04:27
  • 106

LibreOJ #504. 「LibreOJ β Round」ZQC 的手办 线段树+堆

题意给出一个序列,要求资瓷两个操作: 1 l r k表示把[l,r]中小于k的数都改成k 2 l r k x表示从小到大输出[l,r]中小于k的x个数,若数量不足则输出-1 n,q...
  • qq_33229466
  • qq_33229466
  • 2017-06-17 09:23:54
  • 377

「LibreOJ β Round #4」求和 莫比乌斯函数

https://loj.ac/problem/528不含平方因子的数才会有 -1 和 1才会对结果造成影响, 所有排除掉所有含有平方因子的数就好开始的时候平方是1 就是没有平方因子的情况,减去所有平...
  • Hallelujah520
  • Hallelujah520
  • 2017-09-03 18:08:29
  • 231

loj#526. 「LibreOJ β Round #4」子集

给N个点,给出建边的条件,求图中的最大团,直接跑最大团模板会超时,建个对偶图,跑二分图匹配,最大团子集中点的个数就是n-匹配数 #include #include using namespace s...
  • constbh
  • constbh
  • 2017-09-06 10:46:22
  • 114

[博弈论][二分图匹配][网络流] LOJ #536. 「LibreOJ Round #6」花札

SolutionSolutionSolution 这是一个Undirected Vertex Geography。 可以 O(n3)O(n3)\mathcal{O}(n^3) 对每个点得到答案。 ...
  • Vectorxj
  • Vectorxj
  • 2018-02-27 10:10:27
  • 66

[LibreOJ β Round]ZQC的游戏

题目描述见LOJ。网络流建图裸跑。判断是否满流。 简单题。#include #include #include #define fo(i,a,b) for(i=a;i...
  • WerKeyTom_FTD
  • WerKeyTom_FTD
  • 2017-06-17 15:34:01
  • 372

「LibreOJ β Round #2」贪心只能过样例 [bitset]【STL】

题目链接:https://loj.ac/problem/515 ——————————————————————————————————515. 「LibreOJ β Round #2」贪心只能过样例内...
  • qq_33184171
  • qq_33184171
  • 2017-07-03 14:51:58
  • 466
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 39万+
    积分: 1万+
    排名: 1455
    最新评论
    文章分类