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;
}


目录
相关文章
|
机器学习/深度学习 存储 算法
回溯法求解N皇后问题
回溯法求解N皇后问题
163 0
进阶指南图论——闇の連鎖 I. 黑暗的锁链(树上差分+LCA)
进阶指南图论——闇の連鎖 I. 黑暗的锁链(树上差分+LCA)
185 0
LDUOJ——山(计算几何+二分+精度)
LDUOJ——山(计算几何+二分+精度)
91 0
【HDU】1175 连连看(BFS + 剪枝)
【HDU】1175 连连看(BFS + 剪枝)
267 0
【HDU】1175 连连看(BFS + 剪枝)
|
算法
回溯法解决N皇后问题
来源: 维基百科-N皇后问题 解题思路 采用回溯法,即逐一位置放置,然后放置下一行,如果下一行没有合法位置,则回溯到上一行,调整位置,直到得到所有值. 实现代码 /** * solve the N-Queen problem */ public class NQueen { //the ...
2503 0
|
人工智能 数据建模 BI
POJ 3662 Telephone Lines【Dijkstra最短路+二分求解】
Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7214   Accepted: 2638 Description Farmer John wants to set up a telephone line at his farm.
1148 0
|
算法
POJ 3154 Graveyard【多解,数论,贪心】
Graveyard Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1707   Accepted: 860   Special Judge Description Prog...
1253 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。
1153 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.
1289 0