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 花匠 题目传送门

正解似乎是算拐点+1 数据随机dp水过
0表示他是作为比较小的那个点 1则相反
#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 提高组的更多相关文章

  1. [NOIp2013提高组]积木大赛/[NOIp2018提高组]铺设道路

    [NOIp2013提高组]积木大赛/[NOIp2018提高组]铺设道路 题目大意: 对于长度为\(n(n\le10^5)\)的非负数列\(A\),每次可以选取一个区间\(-1\).问将数列清零至少需要 ...

  2. [NOIP2013 提高组] 华容道 P1979 洛谷

    [NOIP2013 提高组] 华容道 P1979 洛谷 强烈推荐,更好的阅读体验 经典题目:spfa+bfs+转化 题目大意: 给出一个01网格图,和点坐标x,y空格坐标a,b,目标位置tx,ty要求 ...

  3. [NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)

    一开始觉得是网络流..仔细一看应该是最短路,再看数据范围..呵呵不会写...这道题是最大生成树+最近公共祖先.第一次写..表示各种乱.. 因为要求运输货物质量最大,所以路径一定是在最大生成树上的.然后 ...

  4. 【NOIP2013提高组T3】加分二叉树

    题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都 ...

  5. NOIP2013 提高组 Day1

    https://www.luogu.org/problem/lists?name=&orderitem=pid&tag=83%7C30 期望得分:100+100+100=300 实际得 ...

  6. [NOIP2013提高组]火柴排队

    题目:洛谷P1966.Vijos P1842.codevs3286. 题目大意:有两排火柴,每根都有一个高度.设a.b分别表示两排火柴的高度,现在要令$\sum(a_i-b_i)^2$最小.现两排火柴 ...

  7. 积木大赛 noip2013提高组day2

    这道题一开始想到处理中间是0的位置,但这样时间太慢了,后来想到一种类似二分的方法,就是把这一段的最小值找到,全部减去最小值,然后有0一出现,就又递归处理前一段,每次答案就加上这一段的最小值: AC代码 ...

  8. [NOIP2013] 提高组 洛谷P1969 积木大赛

    题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...

  9. [NOIP2013] 提高组 洛谷P1970 花匠

    题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定 把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希 望剩下的花排列得比较别致. 具 ...

  10. NOIP2013 提高组day2 3 华容道 BFS

    描述 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间. 小 B 玩的华容道与经典的 ...

随机推荐

  1. fildder抓包工具详解

    fildder页面介绍名称和含义 名称 含义 # 抓取HTTP Request的顺序,从1开始,以此递增 Result HTTP状态码 Protocol 请求使用的协议,如HTTP/HTTPS/FTP ...

  2. selenide 自动化UI测试中Configuration全局配置项目

    selenide 在测试过程中需要设置许多的默认值,方便在测试过程中进行和很好的使用.下面我们在selenide中的api引用过来看看! static Configuration.AssertionM ...

  3. Spark性能超过Hadoop百倍

    Spark在偷换概念,Hadoop跑硬盘,Spark跑内存,地球人都知道,内存的速度可是远超硬盘一个量级,超过100倍又有什么奇怪的.如果要比,咱们都拿硬盘来跑跑看!

  4. Sublime Text 3配置 Python3 开发环境

    来自 https://www.cnblogs.com/zhangqinwei/p/6886600.html Sublime Text作为一款支持多种编程语言的文本编辑神器,深受广大开发者的喜爱.通过简 ...

  5. ISAP 最大流 最小割 模板

    虽然这道题用最小割没有做出来,但是这个板子还是很棒: #include<stdio.h> #include<math.h> #include<string.h> # ...

  6. Pro Git - 笔记3

    Git Branching Branches in a Nutshell Branches in a Nutshell let’s assume that you have a directory c ...

  7. 二分图最大权匹配:Kuhn-Munkres算法

    http://www.cnblogs.com/kuangbin/archive/2012/08/19/2646535.html

  8. java线程(4)——线程同步的锁技术

    同步 同步,字面来看,有点一起工作的意思.但在线程同步中,"同"意为协同.互相配合. 比如: A.B两个线程,并不是说两个线程必须同时一起工作,而是说互相配合工作,在某个时间可能线 ...

  9. WCF 透明代理

    现在我们通过类似的原理创建一个用于模拟WCF服务端和客户端工作原理的模拟程序.[源代码从这里下载] 目录 一.基本的组件和执行流程 二.创建自定义HttpHandler实现对服务调用请求的处理 三.定 ...

  10. 玩lua

    https://my.oschina.net/wangxuanyihaha/blog/186401