noip2013 提高组
T1 转圈游戏 题目传送门
果不其然 第一题还是模拟题 一波快速幂解决问题
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,m,k,x;
int qmod(int a,int b,int c){
int ans=;
while(b){
if(b&) ans=ans*a%c;
b=b/;
a=a*a%c;
}
return ans;
}
int main()
{
n=read(); m=read(); k=read(); x=read();
int v=qmod(,k,n);
printf("%d\n",(v*m+x)%n);
return ;
}
T2 火柴排队 题目传送门
这是道树状数组求逆序数对的题目 当然还要加一波离散化就好了 不过这题的离散化很玄学哇 2333
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
const int M=,mod=;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
struct node{int w,pos;}a[M],b[M];
bool cmp(node a,node b){return a.w<b.w;}
int c[M],sum[M],n;
LL ans;
int lowbit(int x){return x&-x;}
void insert(int x){
while(x<=n){
sum[x]++;
x+=lowbit(x);
}
}
int push_sum(int x){
int ans=;
while(x){ans+=sum[x]; x-=lowbit(x);}
return ans;
}
int main()
{
n=read();
for(int i=;i<=n;i++) a[i].w=read(),a[i].pos=i;
for(int i=;i<=n;i++) b[i].w=read(),b[i].pos=i;
sort(a+,a++n,cmp); sort(b+,b++n,cmp);
for(int i=;i<=n;i++) c[a[i].pos]=b[i].pos;
for(int i=;i<=n;i++){
insert(c[i]);
ans=(ans+i-push_sum(c[i]))%mod;
}
printf("%lld\n",ans);
return ;
}
T3 货车运输题目传送门
几乎是裸的lca吧 用lca维护一波最近公共祖先和路径最小值就好了
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int w[M],n,f[M][];
int main()
{
n=read();
for(int i=;i<=n;i++) w[i]=read(),f[i][]=f[i][]=;
for(int i=;i<=n;i++)
for(int j=i-;j;j--){
if(w[i]>w[j]) f[i][]=max(f[i][],f[j][]+);
if(w[j]>w[i]) f[i][]=max(f[i][],f[j][]+);
if(f[i][]!=&&f[i][]!=) break;
}
printf("%d\n",max(f[n][],f[n][]));
return ;
}
T4 积木大赛 题目传送门
这道题就是我们只考虑相邻两列h1 h2 容易证明他的无后效性
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int w[M],n,f[M][];
int main()
{
n=read();
for(int i=;i<=n;i++) w[i]=read(),f[i][]=f[i][]=;
for(int i=;i<=n;i++)
for(int j=i-;j;j--){
if(w[i]>w[j]) f[i][]=max(f[i][],f[j][]+);
if(w[j]>w[i]) f[i][]=max(f[i][],f[j][]+);
if(f[i][]!=&&f[i][]!=) break;
}
printf("%d\n",max(f[n][],f[n][]));
return ;
}
当然其实正解我也写了一波 比dp快很多呀 2333
至于为什么是拐点
这道题就是求一个 大小大小大小或者 小大小大小大 的序列 其中大小是相对于相邻两个数而言
我们可以分情况考虑答案
1. 前一个数是 ‘大’ (定义为last)那么我们下一个数一定要比他小 这时我们考虑当前数 (定义为now)
如果now<last 很明显符合 那么答案++
如果last>=now 那么前面小于last的以及后面能<last的同样能符合now 那么我们完全可以用now代替last
2 前一个数是 ‘下' 同1
所以这个问题就转换成了求拐点数 拐点数+1就是答案了 2333
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,v[M];
int f,last,ans;
void solve(){
int sum=;
for(int i=;i<=n;i++){
if(f==&&v[i]<last) f=-,sum++;
if(f==-&&v[i]>last) f=,sum++;
last=v[i];
}
ans=max(ans,sum);
}
int main()
{
n=read();
for(int i=;i<=n;i++) v[i]=read();
last=v[]; f=; solve();
last=v[]; f=-; solve();
printf("%d\n",ans);
return ;
}
T5 花匠 题目传送门
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int w[M],n,f[M][];
int main()
{
n=read();
for(int i=;i<=n;i++) w[i]=read(),f[i][]=f[i][]=;
for(int i=;i<=n;i++)
for(int j=i-;j;j--){
if(w[i]>w[j]) f[i][]=max(f[i][],f[j][]+);
if(w[j]>w[i]) f[i][]=max(f[i][],f[j][]+);
if(f[i][]!=&&f[i][]!=) break;
}
printf("%d\n",max(f[n][],f[n][]));
return ;
}
T6 华容道 题目传送门
这道题黄学长都弃坑了 我纠结什么呢 以后补吧 hzwer
noip2013 提高组的更多相关文章
- [NOIp2013提高组]积木大赛/[NOIp2018提高组]铺设道路
[NOIp2013提高组]积木大赛/[NOIp2018提高组]铺设道路 题目大意: 对于长度为\(n(n\le10^5)\)的非负数列\(A\),每次可以选取一个区间\(-1\).问将数列清零至少需要 ...
- [NOIP2013 提高组] 华容道 P1979 洛谷
[NOIP2013 提高组] 华容道 P1979 洛谷 强烈推荐,更好的阅读体验 经典题目:spfa+bfs+转化 题目大意: 给出一个01网格图,和点坐标x,y空格坐标a,b,目标位置tx,ty要求 ...
- [NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
一开始觉得是网络流..仔细一看应该是最短路,再看数据范围..呵呵不会写...这道题是最大生成树+最近公共祖先.第一次写..表示各种乱.. 因为要求运输货物质量最大,所以路径一定是在最大生成树上的.然后 ...
- 【NOIP2013提高组T3】加分二叉树
题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都 ...
- NOIP2013 提高组 Day1
https://www.luogu.org/problem/lists?name=&orderitem=pid&tag=83%7C30 期望得分:100+100+100=300 实际得 ...
- [NOIP2013提高组]火柴排队
题目:洛谷P1966.Vijos P1842.codevs3286. 题目大意:有两排火柴,每根都有一个高度.设a.b分别表示两排火柴的高度,现在要令$\sum(a_i-b_i)^2$最小.现两排火柴 ...
- 积木大赛 noip2013提高组day2
这道题一开始想到处理中间是0的位置,但这样时间太慢了,后来想到一种类似二分的方法,就是把这一段的最小值找到,全部减去最小值,然后有0一出现,就又递归处理前一段,每次答案就加上这一段的最小值: AC代码 ...
- [NOIP2013] 提高组 洛谷P1969 积木大赛
题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...
- [NOIP2013] 提高组 洛谷P1970 花匠
题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定 把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希 望剩下的花排列得比较别致. 具 ...
- NOIP2013 提高组day2 3 华容道 BFS
描述 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间. 小 B 玩的华容道与经典的 ...
随机推荐
- 「暑期训练」「基础DP」 Piggy-Bank (HDU-1114)
题意与分析 完全背包问题. 算法背包九讲里面都有提到过,我自己再说下对完全背包的理解. 为什么01背包中遍历状态从VV到00?考虑一下基本方程$dp[i][j]=max(dp[i-1][j-w[i]] ...
- URAL 1936 Roshambo(求期望)
Description Bootstrap: Wondering how it's played? Will: It's a game of deception. But your bet inclu ...
- MySQL初始4--去重
更新表中的字段: update 表名 set 字段=新值,… where 条件: UPDATE语法可以用新值更新原有表行中的各列.SET子句指示要修改哪些列和要给予哪些值.WHERE子句指定应更新哪些 ...
- 团队作业4——第一次项目冲刺(Alpha版本)-第三篇
项目冲刺——第三阶段 前两阶段很ok,目测这三天可以搞定! 分工讨论 大体上搞定,设置困难度的功能还未完成. 团队成员 任务 郭达 整合各种代码 刘德培 数据库完善和其他人对接 石浩洋 完善PH ...
- 从零开始配置Jenkins(二)——常见问题及排错思路
[前言] 一年多以前就听说Jenkins了,那时知道是它可以完成自动构建,感觉蛮强大的.后来,很多人都说它很恶心.最近,公司需要搭建新的服务器,小编就负责从头开始配置并且发布部署成功每一条线每一个项目 ...
- Javascript Array和String的互转换
Array类可以如下定义: var aValues = new Array(); 如果预先知道数组的长度,可以用参数传递长度 var aValues = new Array(20); -------- ...
- Chromium之各国语言切换
在\src\build\Debug\locales\目录下存放着各国语言所需要的资源文件xx.pak,我这边共有53中语言支持. 命令行进入src\build\Debug目录,敲:chrome.exe ...
- springboot ueditor 使用心得
1.将ueditor引入项目中会发现,图片不能上传,返回值意思是因配置文件错误,导致图片无法上传 默认情况是使用jsp初始配置文件,这就需要项目支持jsp解析 在maven中引入 <!--添加对 ...
- [转]dojo/mouse
dojo/mouse Authors:Kris Zyp Project owner:Kris Zyp since:1.7.0 Contents Usage enter leave mouseButto ...
- 简单配置 Tomcat 的 Server.xml(war包发布)
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" ...