HDU7018.Banzhuan(计算几何+贪心)

简介: HDU7018.Banzhuan(计算几何+贪心)

思路:

先考虑最大值,首先,都填满肯定是最大的,但是在填的过程中要怎么最大化代价呢。每次都将要填的物品放到第n层,这样由于题意可知他会掉落,但是代价依旧是最大的。

最大代价如下:nx=1nxy=1ny2=n2n(n+1)6n(n+1)(2n+1)

接下来考虑最小值。

手模一下n = 4的场景,有以下三种情况:

1.首先在底面平铺一层,然后在左上-右下的对角线上的每个格子都放3个,形成的俯视图如下:

20200401134307494.png蓝色的数字表示高度,这样的代价为750

2.首先在底面平铺一层,然后在右上-左下的对角线上的每个格子都放3个,形成的俯视图如下,代价也是750:

20200401134307494.png

3.

20200401134307494.png

这样的代价为642.


假设1670381880087.png

则答案为$1+(t1-1)(t2-1)+t1(t1-1)+t1*(t2-1)

化简得: t 1 ∗ t 2 + ( t 1 − 1 ) ∗ ( t 2 + t 1 − 2 )

由于涉及到取模,所以计算t 1 , t 2时的除法应该用逆元来算。

代码:

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll>PLL;
typedef pair<int, int>PII;
typedef pair<double, double>PDD;
#define I_int ll
inline ll read(){ll x = 0, f = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-')f = -1;ch = getchar();}while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}return x * f;}
inline void write(ll x){if (x < 0) x = ~x + 1, putchar('-');if (x > 9) write(x / 10);putchar(x % 10 + '0');}
#define read read()
#define closeSync ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define multiCase int T;cin>>T;for(int t=1;t<=T;t++)
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i<(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define perr(i,a,b) for(int i=(a);i>(b);i--)
const ll mod=1e9+7;
ll ksm(ll a, ll b){ll res = 1;while(b){if(b&1)res=res*a%mod;a=a*a%mod;b>>=1;}return res;}
int main(){
    int _=read;
    while(_--){
        ll n=read;
        n%=mod;
        ll t1=n*(n+1)%mod;t1=t1*ksm(2,mod-2)%mod;
        ll t2=n*(n+1)%mod;t2=t2*(2*n%mod+1)%mod;t2=t2*ksm(6,mod-2)%mod;
        ll maxx=n*t1%mod*t2%mod;
        maxx=maxx*n%mod;
        ll minn=t1*t2%mod;
        ll tmp=(t1-1+mod)%mod;
        ll tmp1=(t1+t2-2+mod)%mod;
        minn=(minn+tmp*tmp1%mod)%mod;
        printf("%lld\n%lld\n",minn,maxx);
    }
    return 0;
}


目录
相关文章
|
8月前
poj 1185 炮兵阵地 (状态压缩dp)
如果你是刚刚开始做状态压缩dp,我建议你先看看 poj 3254 Corn Fields 这是一道比这一题更简单,更容易入门的题目。 还有在代码中我用了一个很巧妙的方法求一个数二进制数中1的个数 具体请看我博客中 x& (x - 1)==0 这篇文章 链接 。
23 1
|
网络架构
POJ-1005,I Think I Need a Houseboat(数学题)
POJ-1005,I Think I Need a Houseboat(数学题)
|
算法
POJ 3154 Graveyard【多解,数论,贪心】
Graveyard Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1707   Accepted: 860   Special Judge Description Prog...
1223 0
|
Java 机器学习/深度学习
UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 65817    Accepted Submission(s): 28794 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。
1130 0
|
Windows Perl
Codeforces 626G Raffles(贪心+线段树)
G. Raffles time limit per test:5 seconds memory limit per test:256 megabytes input:standard input output:standard output Johnny is at a carnival which has n raffles.
1268 0
|
Java 测试技术
HDU 1248 寒冰王座(完全背包裸题)
寒冰王座 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17092    Accepted Submission(s): 8800 ...
1196 0