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 玩的华容道与经典的 ...
随机推荐
- 【多校联合】(HDU6045)Is Derek lying?
分析 之前没有想到题目解法,看了题解才会,记录一下思考过程. 这条题目的实质是,在满足合法的情况下,有没有a和d的可行解?也就是说,不要仅仅附在表面的思考逻辑条件,而是要思考实际的数学表达. 转化为数 ...
- gitbash避免每次push都输入密码
gitbash每次提交都要输密码真有点头疼,所以就: 1 创建验证文件:touch .git-credentials(windows) 2 编辑验证文件:vim .git-credentials ...
- LeetCode 24——两两交换链表中的节点
1. 题目 2. 解答 新建一个哨兵结点作为头结点,然后每次交换相邻两个结点.并依次将它们连接到新链表中去,再将原链表中后面的结点也串到新链表后面.直至到达链尾或者剩余一个节点,则此时返回新链表的头结 ...
- TensorFlow 同时调用多个预训练好的模型
在某些任务中,我们需要针对不同的情况训练多个不同的神经网络模型,这时候,在测试阶段,我们就需要调用多个预训练好的模型分别来进行预测. 调用单个预训练好的模型请点击此处 弄明白了如何调用单个模型,其实调 ...
- 使用idea工具开发webservice
在idea开发工具中使用axis2插件创建集成webservice的web项目: 一.创建java项目 二.添加webservices支持 在红线框2处选择要使用的w ...
- HDU 3699 A hard Aoshu Problem(暴力枚举)(2010 Asia Fuzhou Regional Contest)
Description Math Olympiad is called “Aoshu” in China. Aoshu is very popular in elementary schools. N ...
- gdb coredum 信息例子
http://blog.csdn.net/hzhsan/article/details/38227647
- Isolate-user-vlan技术白皮书
http://www.h3c.com.cn/Products___Technology/Technology/LAN/Other_technology/Technology_book/200804/6 ...
- Nginx代理实现跨域
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...
- linux下搜索find命令拾遗
强制删除项目下面的所有.svn文件目录,find . -name ‘.svn’ -exec rm -rf {} \; empty显示所有的空白文件,并显示详细:find . -empty size显示 ...