A,B,C都是水题。。。

D题,直接爆搜。我换了好多姿势,其实最简单的方法,就能过。

#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <iostream>
using namespace std;
int que[];
int p[];
int o[];
int temp[];
int st[];
int ans,minz;
int n,a,b;
void dfs(int x,int sum)
{
int i;
if(sum >= minz) return;
if(x == n)
{
for(i = ;i <= n;i ++)
temp[i] = p[i];
for(i = ;i <= n-;i ++)
{
temp[i] -= o[i]*a;
temp[i-] -= o[i]*b;
temp[i+] -= o[i]*b;
}
for(i = ;i <= n-;i ++)
{
if(temp[i] >= ) break;
}
if(i == n)
{
if(sum < minz)
{
minz = sum;
for(i = ;i <= n-;i ++)
st[i] = o[i];
}
}
return ;
}
for(i = ;i <= ;i ++)
{
o[x] = i;
dfs(x+,sum+i);
}
}
int main()
{
int i,j;
scanf("%d%d%d",&n,&a,&b);
for(i = ; i <= n; i ++)
{
scanf("%d",&p[i]);
}
while(p[] >= )
{
que[ans++] = ;
p[] -= b;
p[] -= a;
p[] -= b;
}
while(p[n] >= )
{
que[ans++] = n-;
p[n-] -= b;
p[n] -= b;
p[n-] -= a;
}
for(i = ;i <= n;i ++)
{
if(p[i] >= ) break;
}
if(i == n+)
{
printf("%d\n",ans);
for(i = ;i < ans;i ++)
printf("%d ",que[i]);
printf("\n");
return ;
}
minz = ;
dfs(,);
printf("%d\n",minz+ans);
for(i = ;i < ans;i ++)
printf("%d ",que[i]);
for(i = ;i <= n-;i ++)
{
for(j = ;j <= st[i];j ++)
printf("%d ",i);
}
printf("\n");
return ;
}

E题,二分+rmq之类的,能求区间最值的算法。

题意是比较扯,按章节排列的n本书,要展示,最长能展示多少本,这一段的高度差要小于等于k,再输出总共多少中情况,把起点,终点输出。

rmq好久没写过了啊,记不得 什么东西了。

#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <iostream>
using namespace std;
int n,k;
int p[];
int dpmin[][];
int dpmax[][];
int bin[];
void CL(int n)
{
int i,j;
for(i = ;i <= n;i ++)
{
dpmin[][i] = p[i];
dpmax[][i] = p[i];
}
for(i = ;bin[i] <= n;i ++)
{
for(j = ;j + bin[i-] <= n;j ++)
{
dpmin[i][j] = min(dpmin[i-][j],dpmin[i-][j+bin[i-]]);
dpmax[i][j] = max(dpmax[i-][j],dpmax[i-][j+bin[i-]]);
}
}
}
int rmqmax(int s,int t)
{
int k = log((t-s+)*1.0)/log(2.0);
return max(dpmax[k][s],dpmax[k][t-bin[k]+]);
}
int rmqmin(int s,int t)
{
int k = log((t-s+)*1.0)/log(2.0);
return min(dpmin[k][s],dpmin[k][t-bin[k]+]);
}
int query(int s,int t)
{
return rmqmax(s,t) - rmqmin(s,t);
}
int judge(int mid)
{
int i,ans = ;
for(i = ;i <= n-mid+;i ++)
{
if(query(i,i+mid-) <= k)
ans ++;
}
return ans;
}
int main()
{
int i,j,str,end,mid;
scanf("%d%d",&n,&k);
for(i = ;i <= n;i ++)
scanf("%d",&p[i]);
bin[] = ;
for(i = ;i <= ;i ++)
bin[i] = bin[i-]*;
CL(n);
str = ;
end = n;
while(str < end)
{
mid = (str + end + )/;
if(judge(mid))
str = mid;
else
end = mid - ;
}
printf("%d %d\n",end,judge(end));
for(i = ;i <= n-end+;i ++)
{
if(query(i,i+end-) <= k)
{
printf("%d %d\n",i,i+end-);
}
}
return ;
}

Codeforces Beta Round #6 (Div. 2 Only)的更多相关文章

  1. Codeforces Beta Round #80 (Div. 2 Only)【ABCD】

    Codeforces Beta Round #80 (Div. 2 Only) A Blackjack1 题意 一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10 现在你已经有一 ...

  2. Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】

    Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...

  3. Codeforces Beta Round #79 (Div. 2 Only)

    Codeforces Beta Round #79 (Div. 2 Only) http://codeforces.com/contest/102 A #include<bits/stdc++. ...

  4. Codeforces Beta Round #77 (Div. 2 Only)

    Codeforces Beta Round #77 (Div. 2 Only) http://codeforces.com/contest/96 A #include<bits/stdc++.h ...

  5. Codeforces Beta Round #76 (Div. 2 Only)

    Codeforces Beta Round #76 (Div. 2 Only) http://codeforces.com/contest/94 A #include<bits/stdc++.h ...

  6. Codeforces Beta Round #75 (Div. 2 Only)

    Codeforces Beta Round #75 (Div. 2 Only) http://codeforces.com/contest/92 A #include<iostream> ...

  7. Codeforces Beta Round #74 (Div. 2 Only)

    Codeforces Beta Round #74 (Div. 2 Only) http://codeforces.com/contest/90 A #include<iostream> ...

  8. Codeforces Beta Round #73 (Div. 2 Only)

    Codeforces Beta Round #73 (Div. 2 Only) http://codeforces.com/contest/88 A 模拟 #include<bits/stdc+ ...

  9. Codeforces Beta Round #72 (Div. 2 Only)

    Codeforces Beta Round #72 (Div. 2 Only) http://codeforces.com/contest/84 A #include<bits/stdc++.h ...

  10. Codeforces Beta Round #70 (Div. 2)

    Codeforces Beta Round #70 (Div. 2) http://codeforces.com/contest/78 A #include<bits/stdc++.h> ...

随机推荐

  1. 【JAVA网络流之URL】

    一.URL URL对象可以认为是URLConnection对象+Socket对象. Java.lang.Object |-Java.net.URL 常用构造方法: URL(String spec)   ...

  2. 【PHP数组的使用】

    PHP数组使用关键字array标识,数组内的元素可以是任意类型,而且可以不是同一种类型,这和c.java不同. 遍历数组的方法可以使用foreach,也可以使用for循环 可以使用print_r或者v ...

  3. SQLAlchemy ORM之建表与查询

    作了最基本的操作,找找感觉.. #coding=utf-8 from datetime import datetime from sqlalchemy import (MetaData, Table, ...

  4. oracle 10g\11g用imp导入数据的时候报错:ORA-01658: 无法为表空间 MAXDATA 中的段创建 INITIAL 区 错误解决

    备份文件是从11g中通过exp命令导出的,在10g下使用imp导入出现了上述错误,以为是低版本的不支持高版本的备份,于是使用11g测试,还是上面的问题. 其实是表空间大小不够的问题,下面是网上的解答: ...

  5. PING命令入门详解

    转自:http://www.linkwan.com/gb/tech/htm/928.htm 1.Ping的基础知识 ping命令相信大家已经再熟悉不过了,但是能把ping的功能发挥到最大的人却并不是很 ...

  6. Effective C++ 之 0 导读(Introduction)

    Effective C++ 导读 (Introduction) 术语(terminology) 声明式 (declaration) 是告诉编译器某个东西的名称和类型(type),但略去细节.以下都是声 ...

  7. UVA 12901 Refraction 数学

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83008#problem/E Description HINT 题意: 给你一个 ...

  8. Jmeter 分布式性能测试

    作为一个纯 JAVA 的GUI应用,JMeter 对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错 ...

  9. 分享Kali Linux 2016.2第49周镜像文件

    分享Kali Linux 2016.2第49周镜像文件 Kali Linux官方于12月4日发布Kali Linux 2016.2的第49周镜像.这次保持以往规律,仍然是11个镜像文件.默认的Gnom ...

  10. Swift3.0语言教程字符串大小写转化

    Swift3.0语言教程字符串大小写转化 Swift3.0语言教程字符串大小写转化,在字符串中,字符串的格式是很重要的,例如首字母大写,全部大写以及全部小写等.当字符串中字符很多时,通过人为一个一个的 ...