题目链接:https://vjudge.net/contest/147632#overview

  A题,状态压缩一下然后暴力即可。

  B题,水题,略过。

  C题,有负数,前缀和不是单调的,因此不能用尺取法。做法是枚举左端点i,然后在[i,n]这个范围内用线段树查找最左边的pre>=S+pre[i-1]的点,更新答案即可(和上次的巴比伦&&圣杯类似)。代码如下:

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <iostream>
#define t_mid (l+r>>1)
#define ls (o<<1)
#define rs (o<<1|1)
#define lson ls,l,t_mid
#define rson rs,t_mid+1,r
using namespace std;
const int N = + ;
typedef long long ll;
typedef pair<int,int> pii; ll pre[N];
int n,S;
ll c[N<<];
void up(int o) {c[o] = max(c[ls], c[rs]);}
void build(int o,int l,int r)
{
if(l == r)
{
c[o] = pre[l];
return ;
}
build(lson);
build(rson);
up(o);
}
int Find(int o,int l,int r,int ql,int qr,ll f)
{
if(l == r)
{
if(pre[l] >= f) return l;
else return -;
}
int ans = -;
if(qr <= t_mid)
{
if(c[ls] >= f) return Find(lson,ql,qr,f);
}
else if(ql > t_mid)
{
if(c[rs] >= f) return Find(rson,ql,qr,f);
}
else
{
if(c[ls] >= f) ans = Find(lson,ql,t_mid,f);
if(ans == - && c[rs] >= f) ans = Find(rson,t_mid+,qr,f);
}
return ans;
}
void solve()
{
int ans = -;
for(int i=;i<=n;i++)
{
int now = Find(,,n,i,n,pre[i-]+S);
if(now != -)
{
if(ans == -) ans = now-i+;
else ans = min(ans, now-i+);
}
}
printf("%d\n",ans);
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&S);
for(int i=;i<=n;i++)
{
int t;
scanf("%d",&t);
pre[i] = pre[i-] + t;
}
build(,,n);
solve();
}
}

  D题,比赛时手推了个O(n)的公式被卡- -,O(n/2)能过。做法是枚举i,在i*i的正方形内,如果i是奇数,那么里面最多有i个满足的矩形,i是偶数,则不存在。然后这样的个数有(a-i+1)*(b-i+1)个。枚举i求个和即可。当然预处理前缀和能O(1)解决。顺便记一下,前n项平方和是n(n+1)(2n+1)/6,奇数项的平方和为

 1*1+3*3+5*5+...+(2n-1)*(2n-1) = 1/3*n*(2n-1)(2n+1)。代码如下:
 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <iostream>
using namespace std;
const int N = + ;
typedef long long ll;
typedef pair<int,int> pii; int main()
{
ll a,b;
while(scanf("%lld%lld",&a,&b) == )
{
if(a == && b == ) break;
ll ans = ;
if(a > b) swap(a,b);
for(int i=;i<=a;i+=) ans += (ll)i*(a-i+)*(b-i+);
printf("%lld\n",ans);
}
return ;
}

  E题,暴力枚举再组合数即可。

2017 ZSTU寒假排位赛 #2的更多相关文章

  1. 2017 ZSTU寒假排位赛 #7

    题目链接:https://vjudge.net/contest/149498#overview. A题,水题,直接按照题意模拟一下即可. B题,我用的是线段树.大力用的差分标记(上次听zy说过,下次再 ...

  2. 2017 ZSTU寒假排位赛 #1

    题目链接:https://vjudge.net/contest/147102#overview. A题:给出一堆的点,要找出两条垂直的直线,一条与x轴呈45度.-->使得所有的点到任意一条直线的 ...

  3. 2017 ZSTU寒假排位赛 #8

    题目链接:https://vjudge.net/contest/149845#overview. A题,水题. B题,给出 p个 第一个人的区间 和 q个第二个人的区间,问[l,r]中有多少个整数满足 ...

  4. 2017 ZSTU寒假排位赛 #6

    题目链接:https://vjudge.net/contest/149212#overview. A题,水题,略过. B题,水题,读清题意即可. C题,数学题,如果把x表示成x=nb+m,则k=n/m ...

  5. 2017 ZSTU寒假排位赛 #5

    题目链接:https://vjudge.net/contest/148901#overview. A题,排序以后xjbg即可. B题,弄个数组记录当前列是不是删除以及当前行是不是已经大于下一行然后乱搞 ...

  6. 2017 ZSTU寒假排位赛 #4

    题目链接:https://vjudge.net/contest/148543#overview. A题:n个罪犯,每个人有一个犯罪值,现在要从里面选出连续的c个人,每个人的犯罪值都不能超过t,问选法的 ...

  7. 2017 ZSTU寒假排位赛 #3

    题目链接:https://vjudge.net/contest/147974#overview. A题,费用流,不会..跳过了. B题,给一个图,问至少添加几条边能成为强连通图.显然缩点,要使得成为一 ...

  8. Codeforces Round #341 (Div. 2)

    在家都变的懒惰了,好久没写题解了,补补CF 模拟 A - Wet Shark and Odd and Even #include <bits/stdc++.h> typedef long ...

  9. 2017杭电ACM集训队单人排位赛 - 6

    2017杭电ACM集训队单人排位赛 - 6 排名 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 59 1 X X 1 1 X X 0 1 ...

随机推荐

  1. list遍历

     一.对List的遍历有三种方式            List<String>    list    =    new    ArrayList<String>();    ...

  2. 使用Github搭建个人博客网站

    1 新建一个repo,创建一个没有父节点的分支gh-pages(github规定,只有该分支中的页面,才会生成网页文件): mkdir jekyll_demo cd jekyll_demo git i ...

  3. 浅谈ajax的优点与缺点

    AJAX (Asynchronous Javascript and XML) 是一种交互式动态web应用开发技术,该技术能提供富用户体验. 完全的AJAX应用给人以桌面应用的感觉.正如其他任何技术,A ...

  4. bash报错./mq.sh: line 15: warning: here-document at line 10 delimited by end-of-file (wanted `eof')

    [root@localhost tmp]# ./mq.sh./mq.sh: line 15: warning: here-document at line 10 delimited by end-of ...

  5. HTTP 中 POST和GET的区别

    1.传送数据的方式不一样 get是将数据队列添加到URL中提交,用户可以看到(对URL反编码就行) post是将数据队列放到HTTP的报文的报头中提交,用户看不到所提交的数据: 2.服务器端获取变量的 ...

  6. 关于SVN 提交一半卡死的问题

    解决方案 1:将项目刷新一下 2:然后在到 project - clean 一下项目 3:之后提交svn 不过暂时不能确认 要等下方进度条的 svn更新状态完成 在点击确认进行提交 4:Buildin ...

  7. 地址选择的,弹出的下拉。select。通过《option》《/option》来隔开

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 转:web_custom_request应用示例

    LoadRunner提供的web_custom_request函数可以用于实现参数的动态生成.在LoadRunner中,web_reg_save_param和custom_request都常于处理参数 ...

  9. CSS3中transform几个属性值的注意点

    transform(变形)是CSS3中的元素的属性,transform的属性值主要包括旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix 基本用法可以参考文 ...

  10. SVN MERGE 和冲突

    摘要:最佳做法是避免冲突.冲突时,不要把branch merge到trunk. 先由最新版本的trunk得到branch,然后再修改文件,直接merge过去就行.这样不会有冲突.先用svn merge ...