BestCoder Round #86 部分题解
Price List
题意:
有n件商品,每天只能买一件,并且会记录账本,问有多少次一定记多了?
题解:
就是求和,最后如果大于和就输出1,否则0。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define SI(N) cin>>(N)
#define SII(N,M) cin>>(N)>>(M)
#define rep(i,b) for(int i=0;i<(b);i++)
int n,m;
int main()
{
    int o;
    SI(o);
    while(o--)
    {
        SII(n,m);
        ll sum=0,a;
        rep(i,n) SI(a),sum+=a;
        rep(i,m)
        {
            SI(a);
            if (a>sum) putchar('1');
            else putchar('0');
        }
        puts("");
    }
    return 0;
}
NanoApe Loves Sequence(线段树)
题意:
在数学课上,NanoApe 心痒痒又玩起了数列。他在纸上随便写了一个长度为 n 的数列,他又根据心情随便删了一个数,这样他得到了一个新的数列,然后他计算出了所有相邻两数的差的绝对值的最大值。
他当然知道这个最大值会随着他删了的数改变而改变,所以他想知道假如全部数被删除的概率是相等的话,差的绝对值的最大值的期望是多少。
题解:
这题可以简单的模拟下,先求出最大值,并记录位置,之后枚举每个要删除的数字,与最大值比较就好,但其中一定会到一个影响最大值的数字,这时候,重新算遍最大值就好了。这是精简的算法,我想的是线段树,有些麻烦:先算出各位之差,之后删除1个点会修改2个绝对值,之后在查询最大值,ans+=最大值,最后不要忘了在更新回来。
代码:
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
const int maxn = 100000+9;
int MAX[maxn<<2];
int inp[maxn];
int iab[maxn],cntb;
void PushUP(int rt) {
    MAX[rt] = max(MAX[rt<<1] , MAX[rt<<1|1]);
}
void build(int l,int r,int rt) {
    if (l == r) {
        MAX[rt]=iab[cntb++];
        return ;
    }
    int m = (l + r) >> 1;
    build(lson);
    build(rson);
    PushUP(rt);
}
void update(int p,int sc,int l,int r,int rt) {
    if (l == r) {
        MAX[rt] = sc;
        return ;
    }
    int m = (l + r) >> 1;
    if (p <= m) update(p , sc , lson);
    else update(p , sc , rson);
    PushUP(rt);
}
int query(int L,int R,int l,int r,int rt) {
    if (L <= l && r <= R) {
        return MAX[rt];
    }
    int m = (l + r) >> 1;
    int ret = 0;
    if (L <= m) ret = max(ret , query(L , R , lson));
    if (R > m) ret = max(ret , query(L , R , rson));
    return ret;
}
int main() {
    int o;
    scanf("%d",&o);
    while(o--)
    {
        memset(iab,0,sizeof(iab));
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&inp[i]);
        }
        for(int i=1;i<=n-1;i++)
        {
            iab[i]=abs(inp[i+1]-inp[i]);
        }
        cntb=1;
        n-=1;
        build(1,n,1);
        ll ans=0;
        ans+=query(2 , n , 1 , n , 1);
        for(int i=2;i<=n;i++)
        {
            update(i, abs(inp[i+1]-inp[i-1]), 1 , n , 1);
            update(i-1, abs(inp[i+1]-inp[i-1]), 1 , n , 1);
            int d=query(1 , n , 1 , n , 1);
            update(i, abs(inp[i+1]-inp[i]), 1 , n , 1);
            update(i-1, abs(inp[i]-inp[i-1]), 1 , n , 1);
            ans+=d;
        }
        ans+=query(1 , n-1 , 1 , n , 1);
        printf("%I64d\n",ans);
    }
    return 0;
}
NanoApe Loves Sequence Ⅱ(尺取法)
题意:
在数学课上,NanoApe 心痒痒又玩起了数列。他在纸上随便写了一个长度为 n 的数列,他又根据心情写下了一个数 m。
他想知道这个数列中有多少个区间里的第 k 大的数不小于 m,当然首先这个区间必须至少要有 k 个数啦。
题解:
首先你要知道,这是尺取法的问题。你要有这么一个思维转换:求第k大的数不小于m也就相当于有k个数是大于等于m的,那么这题用尺取法也就很简单了,最后注意ans的取法,ans+=n-尾指针,int会溢出,所以用ll,以后答案尽量用ll,因为int总是容易爆
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN= 200000 + 9 ;
int a[MAXN];
int n,m,k;
int main()
{
    int o;
    scanf("%d",&o);
    while(o--)
    {
        scanf("%d%d%d",&n,&m,&k);
        for(int i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
        }
        int pre=0,nex=0,cnt=0;
        ll ans=0;
        for(int i=0; i<n; i++)
        {
            if (a[i]>=m)
                cnt++;
            if (cnt==k)
            {
                while(a[nex]<m)
                {
                    ans+=n-i;
                    nex++;
                }
                ans+=n-i;
                nex++;
                cnt--;
            }
        }
        printf("%I64d\n",ans);
    }
    return 0;
}												
											BestCoder Round #86 部分题解的更多相关文章
- [HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP)
		
[HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP) 题面 有三个人从一张N个点无重边的有向无环图上的三个点出发,每单位时间,他们分别选择当前 ...
 - BestCoder Round #86 二,三题题解(尺取法)
		
第一题太水,跳过了. NanoApe Loves Sequence题目描述:退役狗 NanoApe 滚回去学文化课啦! 在数学课上,NanoApe 心痒痒又玩起了数列.他在纸上随便写了一个长度为 nn ...
 - HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002
		
题目:传送门. 题意:题目说的是求期望,其实翻译过来意思就是:一个长度为 n 的数列(n>=3),按顺序删除其中每一个数,每次删除都是建立在最原始数列的基础上进行的,算出每次操作后得到的新数列的 ...
 - HDU5808Price List Strike Back (BestCoder Round #86 E) cdq分治+背包
		
严格按题解写,看能不能形成sum,只需要分割当前sum怎么由两边组成就好 #include <cstdio> #include <cstring> #include <c ...
 - [BC]BestCoder Round#86小结
		
1001 [题意] 给定一个长度为n(n<=100000)的正整数序列,给出m(m<=100000)个子集合和的记录,问哪些一定比正确的记录多了 [题解] 对正整数序列求和,记录比和大的一 ...
 - BestCoder Round #86 A B C
		
这次BC终于不像上次一样惨烈 终于A了三题…… 终测ing…… 发一波题解…… A.Price List A题十分无脑 只要把所有数加起来存到sum里 询问的时候大于sum输出1 否则输出0就行了…… ...
 - BestCoder Round #86
		
A题 Price List 巨水..........水的不敢相信. #include <cstdio> typedef long long LL; int main() { int T; ...
 - BestCoder Round #86 解题报告
		
A.Price List Sol 求和查询 Code #include<cstdio> #include<algorithm> #include<iostream> ...
 - HDU5807 Keep In Touch (BestCoder Round #86 D ) 分布式dp
		
#include <cstdio> #include <cstring> #include <cmath> #include <vector> #inc ...
 
随机推荐
- spark yarn-cluster 和 yarn-client提交的配置
			
1. spark conf 目录下需要配置进去hadoop home 2.需要spark 提交的配置文件 加上‘-- master yarn-cluster/yarn-client’设置提交的模式
 - linux下单节点oracle数据库间ogg搭建
			
环境说明: linux为Linux 2.6.32-573.el6.x86_64 oracle为 11g Enterprise Edition Release 11.2.0.1.0 - 64 ...
 - Using SHOW PROCESSLIST and mysqladmin debug Output in Conjunction with SHOW INNODB STATUS
			
When InnoDB appears hung, I know the natural reaction is to check SHOW ENGINE INNODB STATUS. In fact ...
 - Linux中的15个‘echo’ 命令实例
			
echo是一种最常用的与广泛使用的内置于Linux的bash和C shell的命令,通常用在脚本语言和批处理文件中来在标准输出或者文件中显示一行文本或者字符串. echo命令的语法是: echo [选 ...
 - C++泛型编程原理
			
1.什么是泛型编程前面我们介绍的vector,list,map都是一种数据结构容器,容器本身的存储结构不同,各容器中存在的数据类型也可以不同.但我们在访问这些容器中数据时,拥有相同的方式.这种方式就叫 ...
 - js button onclick动作赋值操作
			
昨天遇到的小问题 记录下 主要的东西其实都在这里:http://www.jb51.net/article/35107.htm 我稍微写一下: <script> function show( ...
 - ASP.NET会话(Session)保存模式--终于知道session为什么丢失了
			
[原创]ASP.NET会话(Session)保存模式 作者:寒羽枫(cityhunter172) 大家好,已有四个多月没写东东啦.今日抽空就说一下 Session 在 .Net v1.0/v1.1 中 ...
 - shell之条件表达式
			
conditional expressions are used by the [[ compound command and the test and [ builtin commands. ari ...
 - 【C语言模拟实现】浮点数-转-定点数
			
要想超神,就要什么都精! 知识准备: 1. 输出浮点数的十六进制形式?(利用指针输出) 将浮点数指针-转换成-整型指针,以十六进制的格式输出指针内容. 示例程序: #include<stdio. ...
 - 用原生javascript做的一个打地鼠的小游戏
			
学习javascript也有一段时间了,一直以来分享的都是一些概念型的知识,今天有空做了一个打地鼠的小游戏,来跟大家分享一下,大家也可以下载来增加一些生活的乐趣,下面P出代码:首先是HTML部分代码: ...