noip模拟赛#15
#15
T1:a[i]>=a[i/2]。输出a的最大字典序
=>可以发现这是二叉树的情况那么就先预处理出每个点有多少个儿子然后递归处理就可以了。
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
int read(){
int x=0,f=1;char c=getchar();
while(!isdigit(c)){
if(c=='-') f=-1;c=getchar();
}
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x;
}
const int nmax=1e5+5;
const int inf=0x7f7f7f7f;
int a[nmax],son[nmax],ans[nmax],n;
void dfs(int x,int l,int r){
if(x>n) return ;ans[x]=a[l];
dfs(x*2,r-son[x*2]+1,r);dfs(x*2+1,l+1,l+son[x*2+1]);
}
int main(){
freopen("lazy.in","r",stdin);
freopen("lazy.out","w",stdout);
n=read();rep(i,1,n) a[i]=read();sort(a+1,a+n+1);
dwn(i,n,1) son[i]=son[i*2]+son[i*2+1]+1;
//rep(i,1,n) printf("%d ",son[i]);printf("\n");
dfs(1,1,n);
rep(i,1,n) printf("%d ",ans[i]);printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}
/*
7
1 2 3 4 5 6 7
6
1 2 3 4 5 6
*/
T2:n:5e4,k=7 k维空间求曼哈顿距离的最远点对。
=>二维的情况下是O(N2K)的显然不行,然后我们可以根据2维的情况推广到k维的情况。复杂度是O(nk2^k)的。
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
#define ll long long
int read(){
int x=0,f=1;char c=getchar();
while(!isdigit(c)){
if(c=='-') f=-1;c=getchar();
}
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x*f;
}
const int nmax=5e4+5;
const int maxn=8;
const ll inf=1e17;
int a[nmax][maxn];bool vis[maxn];
int main(){
freopen("escape.in","r",stdin);
freopen("escape.out","w",stdout);
int n=read(),k=read();rep(i,1,n) rep(j,1,k) a[i][j]=read();
int all=(1<<k)-1;ll u,v,d,tmp,temp,cnt,ans=0;
rep(i,0,all){
u=inf;v=-inf;
clr(vis,0);for(int eo=i,et=1;eo;eo>>=1,++et) vis[et]=eo&1;
//printf("%d\n",i);
//rep(j,1,k) printf("%d",vis[j]);printf("\n");
rep(j,1,n){
temp=0;
rep(t,1,k) temp+=vis[t]?a[j][t]:-a[j][t];
u=min(u,temp);v=max(v,temp);
//printf("%d ",temp);
}
//printf("()\n");
ans=max(ans,v-u);
}
printf("%lld\n",ans);
fclose(stdin);fclose(stdout);
return 0;
}
T3:n个数可以取出k个宽度为d的块。求最大值。取出后数的权值为0。
=>完全没有思路。。。正解好像是单调队列+dp?妈呀先留坑吧。。
=>发现一个奇怪的状态就是早操前想题总是可以很快的想出来。。。然后我就发现这道题不是傻叉单调队列和前缀和优化dp么。。。不要总是以为第三题不可做!
=>然后写了个暴力跑了跑造造数据跑了跑。。。嗯交。A了三个点。。。
=>于是我不服。。。想了想可能的原因:代码应该是不会写错的,那么应该就是题看错了。果然我没考虑右边界的情况。。。TAT
=>一定要看清楚题一定要看清楚题一定要看清楚题一定要看清楚题一定要看清楚题一定要看清楚提!
嗯扔代码:
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
int read(){
int x=0,f=1;char c=getchar();
while(!isdigit(c)){
if(c=='-') f=-1;c=getchar();
}
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x*f;
}
const int nmax=12330;
const int maxn=505;
const int inf=0x7f7f7f7f;
int dp[maxn][nmax],t[nmax],a[nmax],q[nmax];
int main(){
freopen("bowling.in","r",stdin);
freopen("bowling.out","w",stdout);
int T=read();
rep(_T,1,T){
int n=read(),k=read(),w=read();
rep(i,1,n) a[i]=read()+a[i-1];
rep(i,n+1,n+w) a[i]=a[n];n+=w;
rep(i,1,n) dp[1][i]=a[i]-a[max(i-w,0)];
rep(i,1,n) t[i]=max(t[i-1],dp[1][i]);
rep(i,2,k){
int l=1,r=0;
rep(j,1,n) {
dp[i][j]=-inf;
if(j>=w) dp[i][j]=max(dp[i][j],t[j-w]+a[j]-a[j-w]);
if(l<=r&&q[l]<=j-w) ++l;
while(l<=r&&dp[i-1][j]-a[j]>=dp[i-1][q[r]]-a[q[r]]) --r;
q[++r]=j;
dp[i][j]=max(dp[i][j],dp[i-1][q[l]]+a[j]-a[q[l]]);
}
rep(j,1,n) t[j]=max(t[j-1],dp[i][j]);
}
int ans=-inf;
rep(i,0,n) ans=max(ans,dp[k][i]);
printf("%d\n",ans);
}
fclose(stdin);fclose(stdout);
return 0;
}
noip模拟赛#15的更多相关文章
- NOIP模拟赛15
NOIP2017金秋冲刺训练营杯联赛模拟大奖赛第一轮Day1 T1 天天去哪儿吃 直接枚举 #include<cstdio> #include<algorithm> using ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- CH Round #48 - Streaming #3 (NOIP模拟赛Day1)
A.数三角形 题目:http://www.contesthunter.org/contest/CH%20Round%20%2348%20-%20Streaming%20%233%20(NOIP模拟赛D ...
- 【noip模拟赛5】细菌 状压dp
[noip模拟赛5]细菌 描述 近期,农场出现了D(1<=D<=15)种细菌.John要从他的 N(1<=N<=1,000)头奶牛中尽可能多地选些产奶.但是如果选中的奶牛携 ...
- 【HHHOJ】NOIP模拟赛 玖 解题报告
点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- NOIP模拟赛 6.29
2017-6-29 NOIP模拟赛 Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模型.最新款自然有着与以往不同的功能,那就是它能够自动行走, ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
随机推荐
- HDU 5547 Sudoku (暴力)
题意:数独. 析:由于只是4*4,完全可以暴力,要注意一下一些条件,比如2*2的小方格也得是1234 代码如下: #pragma comment(linker, "/STACK:102400 ...
- rest framework 认证
一.简单认证示例 需求: 用户名密码正确:没有 token 则产生一个 token,有 token 则更新,返回登录成功: 若用户名或密码错误,返回错误信息. 1.models.py from dja ...
- 性能压测,SQL查询异常
早上测试对性能压测,发现取sequence服务大量超时报错,查询线上的监控SQL: 大量这个查询,我在DeviceID和Isdelete上建有复合索引,应该很快,而且我测试了一下,取值,执行效率很高, ...
- DIV垂直水平居中
方法一:使用定位的方法 .parent { width: 300px; height: 200px; border: 1px solid red; position:relative; } .chil ...
- 2017 Fzu校赛 [Cloned]
A - Salty Fish 海边躺着一排咸鱼,一些有梦想的咸鱼成功翻身(然而没有什么卵用),一些则是继续当咸鱼.一个善良的渔夫想要帮这些咸鱼翻身,但是渔夫比较懒,所以只会从某只咸鱼开始,往一个方向, ...
- 洛谷P1031 均分纸牌
P1031 均分纸牌 题目描述 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌 ...
- 洛谷P4003 无限之环(费用流)
传送门 神仙题啊……不看题解我可能一年都不一定做得出来……FlashHu大佬太强啦 到底是得有怎样的脑回路才能一眼看去就是费用流啊…… 建好图之后套个板子就好了,那么我们着重来讨论一下怎么建图 首先, ...
- 关于c语言中的字符串问题
对字符数组,字符指针,字符串常量 在csdn上看到一篇关于这方面的帖子,有所收获. JohnTitor的专栏 1.以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写 & ...
- 在linux服务器下日志提取的python脚本(实现输入开始时间和结束时间打包该时间段内的文件)
1.需求:近期在提取linux服务器下的日志文件时总是需要人工去找某个时间段内的日志文件,很是枯燥乏味,于是乎,我就想着用python结合linux指令来写一个日志提取的脚本,于是就有了以下脚本文件: ...
- vue教程3-webpack搭建项目
vue-cli https://cli.vuejs.org/zh/ vue-cli是vue的命令行工具,对于创建项目,安装各种组件,运行项目都极为方便,是在开发vue中的必备工具 vue-cli基于n ...