BZOJ 3193 地形生成

这种dp好烦啊。

懒得写题解。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1050
#define mod 2011
using namespace std;
int n,x,y,f[maxn],ans1=1,ans2=1,l[maxn],r[maxn],cnt=0;
struct status
{
    int h,f;
    friend bool operator < (const status &x,const status &y)
    {
        if (x.h!=y.h) return x.h>y.h;
        return x.f<y.f;
    }
}s[maxn];
int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++) scanf("%d%d",&s[i].h,&s[i].f);
    sort(s+1,s+n+1);
    for (int i=1;i<=n;i++)
    {
        if (s[i].h!=s[i-1].h)
        {
            r[cnt]=i-1;
            l[++cnt]=i;
        }
    }
    r[cnt]=n;
    for (int i=1;i<=cnt;i++)
    {
        for (int j=l[i];j<=r[i];j++) ans1=(ans1*min(s[j].f+j-l[i],j))%mod;
        memset(f,0,sizeof(f));f[1]=1;
        for (int j=l[i];j<=r[i];j++)
            for (int k=1;k<=min(s[j].f,l[i]);k++)
                    f[k]=(f[k]+f[k-1])%mod;
        int ret=0;for (int k=1;k<=min(s[r[i]].f,l[i]);k++) ret=(ret+f[k])%mod;
        ans2=(ans2*ret)%mod;
    }
    printf("%d %d\n",ans1,ans2);
    return 0;
}
时间: 2024-12-18 22:47:49

BZOJ 3193 地形生成的相关文章

Day3:关于地形生成

---恢复内容开始--- 今天桃子好像还是没什么动静,不过媳妇倒是有一点见红~ 希望这是马上要出来的前兆了~ 桃子都已经晃点我俩好多回了~ 已经都快习惯来她这个狼来了的征兆了~ -------------------------------任性的分割线--------------------------------- 因为想做一个类似<Minecraft>的游戏,所以各种找关于地形生成的算法~ 虽然之前弄得那个柏林噪音的算法可以,但是欠缺太多东西了~ 不知道是不是我太钻牛角尖了~ 对应该如何制

三维地形生成

三维地形生成的相关代码matlab 1 function terrain() 2 n=9;%递归次数 3 H=2;%设置初始正方形四顶点值 4 t=0.2;%控制地貌形态 5 delta=0.01;%初始随机位移偏移量,控制地貌形态 6 size=2^n+1; 7 S=zeros(size,size);%设置size*size的初始方阵 8 S(1,1)=H+sqrt(1-2^(2*t-2))*normrnd(0,1)*delta;%赋初始高度值 9 S(1,size)=H+sqrt(1-2^(

BZOJ 3193 JLOI2013 地形生成 组合数学

题目大意:给定一些山,每座山有一个高度和一个关键值,现在要将这些山排成一个序列,要求每座山之前高度高于它的山的数量不能超过它的关键值,求合法的标号序列数和高度序列数 = = 首先我们考虑第一问 我们发现高度较小的山对高度较大的山是没有影响的 那么我们可以将山按照高度从大到小排序 每座山插入时都有一些备选位置 将备选位置数相乘即是答案 现在考虑第二问 嘲讽:谁能告诉我O(n^3)到底怎么做= = 我们按照之前的思路将山按照高度从大到小排序 将高度相同的山拎出来 每一座山都有一些位置可选 那么我们不

[JLOI2013]地形生成

题目描述 最近IK正在做关于地形建模的工作.其中一个工作阶段就是把一些山排列成一行.每座山都有各不相同的标号和高度.为了遵从一些设计上的要求,每座山都设置了一个关键数字,要求对于每座山,比它高且排列在它前面的其它山的数目必须少于它的关键数字. 显然满足要求的排列会有很多个. 对于每一个可能的排列,IK生成一个对应的标号序列和等高线序列.标号序列就是按顺序写下每座山的标号. 等高线序列就是按顺序写下它们的高度.例如有两座山,这两座山的一个合法排列的第一座山的标号和高度为1和3,而第二座山的标号和高

BZOJ 4516: [Sdoi2016]生成魔咒

Description 给出一串数字,求每次插入一个数字后本质不同的子串. Sol SAM. 在 SAM 上添加节点的时候统计一下 \(val[np]-val[par[np]]\) 就可以了... 用 map 存一下边,复杂度 \(O(nlogn)\) Code /************************************************************** Problem: 4516 User: BeiYu Language: C++ Result: Accept

●BZOJ 4516 [Sdoi2016]生成魔咒

题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4516 题解: 把串反过来后,问题变为求每个后缀的互不相同的子串个数.首先用倍增算法求出 sa[],rank[],height[],然后对 height[]数组建立 ST表.接着求出整个串的子串个数,ans+=N-sa[i]-height[i].(我从0开始编号的)式子的含义就是考虑每个后缀相比它的前一名,多了几个与之前不同的且串头为该后缀的头的子串. (一定要清晰地懂得并理解那个式子哦)

luoguP3255 [JLOI2013]地形生成 动态规划

出题人语文真好... 各不相同的标号和高度 = 各不相同的标号 + 单独的高度... 第一问比较简单,考虑从大到小插入,在相同情况下,按关键值从小到大插入 这样子,关键大的元素一定会影响到关键小的元素,不会漏统计 插入$i$号元素时,不妨设比它大的数为$S$个,限制为$lim$,和它相同的且已经插入的数有$j$种 那么有$min(S, lim) + j$种插入的方案 第二问也比较简单 考虑$dp$,令$f(i, j)$表示在相同的数中,插入到了$i$,并且$i$插入在第$j$段 由于插入的顺序是

关于生成三维地形

本以为<OpenGL游戏编程>中的地形生成算法很高大上,但最近几天因为在看<3D地形编程>,整本书介绍的都是跟地形相关的内容,而<OpenGL游戏编程>中所述地形算法正是最简单的那种,仅仅是<3D地形编程>入门级的算法(硬渲染算法),由LOD.CLOD算法生成的地形是为了渲染大型室外场景的.<OpenGL游戏编程>这本书如今称得上是看明白了,介绍的更多的是OpenGL API和OpenGL程序机制,比较基础,纯粹是堆积木式的开发.总的来说,算法层

unity3d 随机生成地形之随机山脉

利用Fractal Noise生成地形,再加上山体shader,外加雪shader Noise生成结果 noise 生成主要参考这篇文章,就不再赘述 Value3D: Perlin2D: Fractal Noise: 地形生成结果 生成地形网格方法主要参考这篇文章,就不再赘述 noise 频率:22,分辨率:256 Value3D: Perlin2D: Fractal Noise: noise 有很多用处,比如地形,水体,流体,特殊物体的纹理,或使贴图不重复等等 山体shader Shader方