#1595 : Numbers

时间限制:8000ms
单点时限:1000ms
内存限制:256MB

描述

给定n个整数常数c[1], c[2], ..., c[n]和一个整数k。现在需要给2k个整数变量x[1], x[2], ..., x[k], y[1], y[2], ..., y[k]赋值,满足

(1)对于所有1 ≤ i ≤ k,都有x[i] ≤ y[i]。

(2)对于所有1 ≤ i ≤ n,都存在至少一个j (1 ≤ j ≤ k),使得x[j] ≤ c[i] ≤ y[j]。

求出S=(y[1] + y[2] + ... + y[k]) - (x[1] + x[2] + ... + x[k])的最小值。

输入

第一行两个整数n, k。(1 ≤ n, k ≤ 100000)
接下来n行,每行一个整数c[i]。 (-1000000000 ≤ c[i] ≤ 1000000000)

输出

输出一个整数表示S的最小值。

样例解释

x[1]=-5, y[1]=4,

x[2]=10, y[2]=10.

样例输入
5 2
-5
0
10
4
0
样例输出
9

首先,如果k≥n则可以零距离夹住每个c,此时答案为0。

当k<n时,只需将n个数字从小到大排序,去掉其中最长的k-1个间隔即可。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
long long c[], d[];
int cmp(const void * x, const void * y) {
return *((long long *) x) > *((long long *) y);
}
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
int n, k;
scanf("%d%d", &n, &k);
for (int i = ; i < n; i++) {
scanf("%lld", &c[i]);
}
if (k >= n) {
printf("0\n");
return ;
}
qsort(c, n, sizeof(long long), cmp);
for (int i = ; i < n - ; i++) {
d[i] = c[i + ] - c[i];
}
qsort(d, n - , sizeof(long long), cmp);
long long ans = c[n - ] - c[];
for (int i = , j = n - ; i < k; i++, j--) {
ans -= d[j];
}
printf("%lld\n", ans);
return ;
}

#1596 : Beautiful Sequence

时间限制:11000ms
单点时限:1000ms
内存限制:256MB

描述

对于一个正整数列a[1], ... , a[n] (n ≥ 3),如果对于所有2 ≤ i ≤ n - 1,都有a[i-1] + a[i+1] ≥ 2 × a[i],则称这个数列是美丽的。

现在有一个正整数列b[1], ..., b[n],请计算:将b数列均匀随机打乱之后,得到的数列是美丽的概率P。

你只需要输出(P × (n!))mod 1000000007即可。(显然P × (n!)一定是个整数)

输入

第一行一个整数n。 (3 ≤ n ≤ 60)
接下来n行,每行一个整数b[i]。 (1 ≤ b[i] ≤ 1000000000)

输出

输出(P × (n!))mod 1000000007。

样例输入
4
1
2
1
3
样例输出
8

满足美丽性质的序列形状为V字形,即先递减后递增,单调序列可以理解为左边或右边长度为0的V字形。

V字形最低点的数字一定是数列中最小的数字,把数列按从小到大的顺序依次添加到两端,只要保证每次添加时和该端最边上的两个数字满足美丽性质,即可实现美丽数列的构造。

首先按从小到大的顺序排序

令dp[i][j][k][l]为当前的数列最左边的两个的下标分别为ij,最右边的两个数字的下标分别为kl时的美丽数列个数。若i=j,表示右边没有了;若k=l,表示左边没有了。

可以通过一个四重循环ijkl实现状态转移,第一重表示当前要添加下标为i的数字,显然,此时数列最左端或最右端的数字中一定有一个编号为i-1,用三重循环jkl枚举另外三个数字。i-1在左边或右边分两种情况,每种情况下各自可能将i添加到左边或右边,一共四次判断,复杂度为O(n^4)。

再想一想的话,其实在循环i时,两端的四个数字里除了必定有一个i-1之外,i-2肯定也在其中,所以其实只用枚举另外两个数字就行了,这种情况下要写八次判断,复杂度为O(n^3),应该也是可以的,不过没有试。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int n;
long long dp[][][][], a[];
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
scanf("%d", &n);
for (int i = ; i < n; i++) {
scanf("%lld", &a[i]);
}
for (int i = ; i < n; i++) {
for (int j = i + ; j < n; j++) {
if (a[i] > a[j]) {
long long t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
int cnt = ;
for (int i = ; i < n; i++) {
if (a[i] == a[]) {
cnt++;
}
}
for (int i = ; i < n; i++) {
a[i] = a[i + cnt - ];
}
n = n - cnt + ;
memset(dp, , sizeof(dp));
dp[][][][] = dp[][][][] = dp[][][][] = ;
for (int i = ; i < n; i++) {
for (int j = ; j < i; j++) {
for (int k = ; k < i; k++) {
for (int l = ; l < i; l++) {
//dp[i-1,j,k,l]
if (i - != j && k != l) {
if ((long long)(a[i] + a[j]) >= (long long)( * a[i - ])) {
dp[i][i - ][k][l] += dp[i - ][j][k][l];
dp[i][i - ][k][l] %= ;
}
if ((long long)(a[k] + a[i]) >= (long long)( * a[l])) {
dp[i - ][j][l][i] += dp[i - ][j][k][l];
dp[i - ][j][l][i] %= ;
}
}
//dp[j,k,l,i-1]
if (j != k && l != i - ) {
if ((long long)(a[i] + a[k]) >= (long long)( * a[j])) {
dp[i][j][l][i - ] += dp[j][k][l][i - ];
dp[i][j][l][i - ] %= ;
}
if ((long long)(a[l] + a[i]) >= (long long)( * a[i - ])) {
dp[j][k][i - ][i] += dp[j][k][l][i - ];
dp[j][k][i - ][i] %= ;
}
}
}
}
}
}
long long ans = ;
if (n > ) {
for (int i = ; i < n; i++) {
for (int j = ; j < n; j++) {
for (int k = ; k < n; k++) {
ans += dp[n - ][i][j][k];
ans += dp[i][j][k][n - ];
ans %= ;
}
}
}
} else {
ans = ;
}
for (int i = ; i <= cnt; i++) {
ans = (ans * i) % ;
}
printf("%lld\n", ans);
return ;
}

hihoCoder挑战赛31的更多相关文章

  1. hihoCoder挑战赛23

    hihoCoder挑战赛23 A.Emulator 题意 给一张图,有\(N(N \le 300)\)个点, 给出任意两点之间的最短路. 求最多可以去掉多少条边,使得任意两点的最短路长度不变. 思路 ...

  2. [题解]hihoCoder挑战赛18——题目1 神奇字符串

    题目地址:http://hihocoder.com/problemset/problem/1264 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 我们说两个字符串是非常 ...

  3. hihocoder挑战赛26

    某蒟蒻成功的·写出了T1并rank16...小岛的题目真难... 传送门:http://hihocoder.com/contest/challenge26 T1 如果你想要暴力枚举的话显然是不行的 如 ...

  4. hihoCoder挑战赛25

    萌新第一次打hihoCoder的比赛有点慌 T1 T1并不是特别难想到dp就好做了 显而易见的是一个01背包问题 Code: #include <cstdio> #include < ...

  5. hihoCoder挑战赛11.题目4 : 高等理论计算机科学(LCA)

    clj在某场hihoCoder比赛中的一道题,表示clj的数学题实在6,这道图论貌似还算可以... 题目链接:http://hihocoder.com/problemset/problem/1167 ...

  6. hihoCoder挑战赛34 B题(快速求第k轮冒泡排序的结果)

    官方题解:https://media.hihocoder.com/contests/challenge34/tutorials-previewed.pdf 题目链接:http://hihocoder. ...

  7. 【hihoCoder挑战赛28 A】异或排序

    [题目链接]:http://hihocoder.com/problemset/problem/1509 [题意] [题解] 每次找到相邻两个数的二进制形式中; 不同的最高位; 显然S在这一位必然是确定 ...

  8. hihoCoder挑战赛1 毁灭者问题

    题目链接:http://hihocoder.com/problemset/problem/1034 数据结构题,由于每个魔法单位有着不同的回复速度和上限,所以不能根据吸收时间点进行查询和更新.但是如果 ...

  9. hihocoder挑战赛13A

    #1191 : 小W与网格 描述 给定一个n*m的网格,左上角(1, 1),右下角(n, m). 小w在(i, j),他会从"上左下右"四个方向中选定两个不同但正交的方向,然后他只 ...

随机推荐

  1. H3C交换机配置常用命令(转)

    1.配置文件相关命令 [Quidway]display current-configuration //显示当前生效的配置 [Quidway]display saved-configuration / ...

  2. 如何查看Linux的CPU负载

    哪些工具可以查看 CPU 负载? 可以使用 top 命令.uptime 命令,特别是 top 命令,功能强大,不仅仅可以用来查看 CPU 负载. CPU 负载怎么理解?是不是 CPU 利用率? 要区别 ...

  3. BZOJ 4999: This Problem Is Too Simple! DFS序+LCA+树状数组+离线

    Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) , ...

  4. MAC 快捷键&使用技巧等

    查看端口占用:命令 lsof -i tcp:port  (port替换成端口号,比如6379)可以查看该端口被什么程序占用,并显示PID,方便KILL    

  5. 我理解的数据结构(三)—— 队列(Queue)

    我理解的数据结构(三)-- 队列(Queue) 一.队列 队列是一种线性结构 相比数组,队列对应的操作是数组的子集 只能从一端(队尾)添加元素,只能从另一端(队首)取出元素 队列是一种先进先出的数据结 ...

  6. C#中三种弹出信息窗口的方式

    弹出信息框,是浏览器客户端的事件.服务器没有弹出信息框的功能. 方法一: asp.net页面如果需要弹出信息框,则需要在前台页面上注册一个javascript脚本,使用alert方法.使用Client ...

  7. cxdbImage以及图像显示

    把pdf以及图像存入数据库,然后根据需要显示出来.在处理的过程中,不同类型的图像格式有其不同的类,如果这个概念不清楚,就会绕一个很大的圈子. MyJPEG : TJPEGImage ; mypng : ...

  8. Java代码模拟http请求的两种方式

    z这里用百度地图的逆地理编码接口为例, 第一种方式:(通过jdk中的java.net包) 引入工具类 import java.net.URL; import java.net.URLConnectio ...

  9. 2-SAT·hihoCoder音乐节

    2-SAT·hihoCoder音乐节 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 hihoCoder音乐节由hihoCoder赞助商大力主办,邀请了众多嘉宾和知名乐队 ...

  10. mybatis使用-helloword(一)

    前言 首先感谢https://my.oschina.net/zudajun/blog/665956(jd上也出书了貌似)  这位作者.让自己能系统的看完和理解第一个框架的源码(其实我反复看了4遍以上, ...