srm 547

欢迎点此阅读QvQ

250


Description

1x105,1y105,x,yN ,给定 w ,随机选x,y sqrt((xy)2+w2) 的期望

Solution

枚举 xy 即可,注意细节即可

Code

#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define F first
#define S second
typedef long long LL;
typedef pair<int, int> pii;
struct Pillars {
    double getExpectedLength(int w, int x, int y) {
         double ans = 0.0;
         if (x < y) swap(x, y);
         int del = x - y;
         for (int d = 1 - y; d <= 0; ++d) {
            ans += (double)(y + d) * sqrt(1.0 * d * d + w * w);
         }
         for (int d = 1; d <= del; ++d) {
            ans += (double)y * sqrt(1.0 * d * d + w * w);
         }
         for (int d = del + 1; d < x; ++d) {
            ans += (double)(x - d) * sqrt(1.0 * d * d + w * w);
         }
         return ans / x / y;
    }
};

500


Description

给定一个 h×w(h,w106) 的矩阵,数字为别为 0h×w1 ,给定一个 sum(sum1012) ,求最小面积的子矩形,使得和等于 sum

Solution

考虑面积的上界 s ,s×(s1)/2sum,于是得到上界是 106 级别的,枚举 n ,复杂度为N×logN,显然是可以接受的。
设矩阵最上角为 x ,根据等差数列求和,显然可以列出x sum 的关系,判断是否满足即可

Code

#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define F first
#define S second
typedef long long LL;
typedef pair<int, int> pii;
struct RectangularSum {
    long long minimalArea(int height, int width, long long S) {
        int s;
        for (s = 1; (LL)s * (s - 1) / 2 <= S; ++s);
        int ans = 1e7;
        for (int n = 1; n <= s && n <= height; ++n)
            for (int m = 1; n * m <= s && m <= width; ++m) {
                if (S * 2 % n != 0) continue;
                LL t = S * 2 / n - (LL)(n - 1) * m * width;
                if (t < 0 || t & 1) continue;
                if (t % m != 0) continue;
                t = t / m + 1 - m;
                if (t < 0 || t & 1) continue;
                t /= 2;
                int y = t % width, x = t / width;
                if (x >= 0 && x + n - 1 < height && y >= 0 && y + m - 1 < width)    ans = min(ans, n * m);
            }
        return ans == 1e7 ? -1 : ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值