首页 > TAG信息列表 > NOIP2013

P1966 [NOIP2013 提高组] 火柴排队做题笔记

这题和 P5677 一样,是从树状数组题单里翻出来的,由于开始看时感觉题解代码写的不是很清晰,就先放进了做题计划里,后来几次看这道题,但由于第一次看题可能留下了一些心理阴影以及时间不多,一直没切掉。直到先去做了用树状数组求逆序对,才感觉这道题变得简单了不少。思路:用一个数组储存输入

J [NOIP2013]货车运输 lca 最大生成树 点和点之间所有路径最小值的最大值

 链接:https://ac.nowcoder.com/acm/problem/16527来源:牛客网 题目描述 A 国有 n 座城市,编号从 1 到 n ,城市之间有 m 条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运

P1966 [NOIP2013 提高组] 火柴排队

有两盒火柴,每盒装有 \(n\) 根火柴,每根火柴都有一个高度。 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同。其中 \(a_i\) 表示第一列火柴中第 \(i\) 个火柴的高度,\(b_i\) 表示第二列火柴中第 \(i\) 个火柴的高度。 每列火柴中相邻两根火柴的位置都可以交换,通过交换使

P1967 [NOIP2013 提高组] 货车运输

给定一张图, \(q\) 组询问从 \(s_i\) 到 \(t_i\) 路径上最大边权的最小值。 \(n < 10^4\),\(m < 5 \times 10^4\),\(q<3\times10^4\)。 首先,所有询问的答案均在原图的最小生成树上,是最小生成树的瓶颈边,因为任何不在最小生成树上的边一定比原边更大,然后问题就变成寻找树上2点的路径上

1002 [NOIP2013]车站分级 拓扑排序 超级站点 给不好直接连边的点连边 给有层级关系但是没法直接标明的序列划分等级

链接:https://ac.nowcoder.com/acm/contest/26077/1002来源:牛客网 题目描述 一条单向的铁路线上,依次有编号为1, 2, …, n 的n 个火车站。每个火车站都有一个级别,最低为1 级。现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火

[NOIP2013 提高组] 积木大赛

试题分析:题目虽然可以用递归,但最优方法还是用贪心,每次输入进去,如果比前一个数小,那么减前一个数时就可以顺便把他减掉,如果大于则还得自己减。 代码:  

P1967 [NOIP2013 提高组] 货车运输

首先能想到floyed暴力做法 60分是没问题的 进一步 两点之间路径可能会有多条 但是我们只用找到路径上最长边最小的那条 但是因为有多个询问 所以我们不能单方面考虑两个点 而是考虑很多对两个点 考虑建立最大生成树 这样的解一定是最优的!!!很巧妙 最后找两点之间的最短的那条边 用

洛谷P1966 [NOIP2013 提高组] 火柴排队

主要思路:离散化+归并求逆序对 点击查看代码 #include<bits/stdc++.h> using namespace std; const int N=1e5+10,M=1e8-3; int p[N],tmp[N],cnt=0; struct FF{ int h,fi; }fs1[N],fs2[N]; bool cmp(FF x,FF y){ return x.h<y.h; } void merge_sort(int l,int r){ if(l>=

P1980 [NOIP2013 普及组] 计数问题

#include<stdio.h> #include<string.h> #include<stdlib.h> char num[10]; int main() { int n, x; while(scanf("%d %d", &n, &x) != EOF) { int kase = 0; for(int i = 1; i <= n; i++) {

题解【NOIP2013_火柴排序】— 问题与转化

题解_NOIP2013_火柴排序 题意:  有两个序列a,b,每个序列的元素不同。任意一个序列的任意两个相邻的元素可以互换,要求对两个序列进行操作,使得 ∑ ( a

P1965 [NOIP2013 提高组] 转圈游戏

明显一次操作会让一个小朋友向右位移 \(m\) 位,即变成 \((x+m)\bmod n\)。 所以 \(10^k\) 次操作之后就是 \((x+m\times 10^k)\bmod n\) #include<bits/stdc++.h> using namespace std; #define int long long int ksm(int a,int b,int mod){ if(b==1)return a; int ans=ksm(a,b>

P1965 [NOIP2013 提高组] 转圈游戏

Problem 给定\(n,m,k,x\),\(x\)每次会变成\((x + m) \bmod n\),称为1次变换,求经过\(10^k\)次变换后\(x\)的值。 \(n \le 10^6,m < n,k,x \le 10^9\)。 Solution 看见\(n\)数据范围显然可以想到整循环节,但是我们不会推,咋办,发现求循环节至多\(\mathcal{O}(n)\),求完之后相当于求\(10^k

[NOIP2013 提高组] 火柴排队

题目【逆序对应用】 思路 首先,什么状态是目标状态 即(ai-bi)^2 最小的状态=ai^2+bi^2-2aibi ai^2与bi^2不变, 主要要求sum(aibi)最大 可以证明,第二列的大小顺序与第一列保持一致最大 即aibi差距最小最大 令x[sx[i]] = sx[i] x的逆序对即为需要交换的次数 代码 #include <bits/st

[NOIP2013 提高组] 华容道

这道题记录状态的思想挺好的 假如棋子在(i,j): 那么它上面空格的编号为((i-1)*4+(j-1)*4+0) 那么它下面空格的编号为((i-1)*4+(j-1)*4+1) 那么它左面空格的编号为((i-1)*4+(j-1)*4+2) 那么它右面空格的编号为((i-1)*4+(j-1)*4+3)   ↑手动分割 所以俺们要记录的 ①在不动棋子本身的情况下,棋子周围空格乱转的

洛谷P1983 [NOIP2013 普及组] 车站分级

P1983 [NOIP2013 普及组] 车站分级 想了个nt优化怎么也觉得不对但是过了最后发现自己根本每加优化/px 每次列车停靠的车站都有可能是同一级,每次停靠的车站向没停靠的车站连有向边,然后拓扑排序即可 问题在于暴力建边复杂度为\(O(mn^2)\) 每辆车建一个虚点,停靠的站指向虚点,虚点指向

3528. 【NOIP2013模拟11.7A组】图书馆(library)

图书馆 给定一张有 \(n\) 个点的 DAG,求边权的方差最小的 \(1\sim n\) 的路径,保证最长的路径不会经过超过 \(20\) 条边。 \(n\leq 50,w\leq 50\),其中 \(w\) 表示单个边的边权。 太菜了不会方差公式,所以根本无从下手。先给出公式: \[S^2=((a_1^2+a_2^2+\cdots+a_n^2)-(a_1+a_2+\cdo

[纪中D2A组T2/NOIP2013模拟联考2]公路维护(road)

目录题目思路code [纪中D2A组T2/NOIP2013模拟联考2]公路维护(road) 题目 GMOJ3448 给定\(n\)个数,初始值均为\(I\),共\(m\)个操作: \(op=1\):检测区间是否有非正数,若无,区间全体减去一个数,\(ans=ans+1\) \(op=2\):给区间所有正数加上一个数 \(op=3\):给定区间和一个值\(p\),遍

【NOIP2013中秋节模拟】表白(love) 题解

【NOIP2013中秋节模拟】表白(love) Description 鸡腿是CZYZ的著名DS,但是不想追妹子的DS不是好GFS,所以鸡腿想通过表白来达到他追到妹子的目的!虽然你对鸡腿很无语,但是故事的设定是你帮助鸡腿找到了妹子,所以现在你必须帮助鸡腿安排表白来实现故事的结局 ! 鸡腿想到了一个很高(sha)明(bi)的

P1980 [NOIP2013 普及组] 计数问题

题目描述 试计算在区间 11 到 nn的所有整数中,数字x(0 ≤ x ≤ 9)x(0≤x≤9)共出现了多少次?例如,在 11到1111中,即在 1,2,3,4,5,6,7,8,9,10,111,2,3,4,5,6,7,8,9,10,11 中,数字 11 出现了 44 次。 输入格式 22个整数n,xn,x,之间用一个空格隔开。 输出格式 11个整数,表示xx出现的次数。

P1983 [NOIP2013 普及组] 车站分级

原题链接 考察:拓扑排序 思路:   等级低与等级高之间建立边.比如区间[1,6]之间停靠了(1,3,5,6).那么在(1,3,5,6)与(2,4)之间两两间加一条边.最后拓扑排序即可.   但是这样会TLE.时间复杂度O(109),空间复杂度极限O(500*500*1000).需要进一步优化.   但是注意初始化等级时,虚

luogu P1983 [NOIP2013 普及组] 车站分级

添加链接描述 #include<bits/stdc++.h> using namespace std; const int N=1e6+10;//我还是小瞧了1000*1000的点可以构成的边0.0 int n,m; int e[N],ne[N],h[N],idx,d[N]; void add(int a,int b) { e[idx]=b,ne[idx]=h[a],h[a]=idx++; d[b]++; } int step[N],mx=0; i

洛谷日记P1980 [NOIP2013 普及组] 计数问题

题目描述 试计算在区间 11 到 nn的所有整数中,数字x(0 ≤ x ≤ 9)x(0≤x≤9)共出现了多少次?例如,在 11到1111中,即在 1,2,3,4,5,6,7,8,9,10,111,2,3,4,5,6,7,8,9,10,11 中,数字 11 出现了 44 次。 输入格式 22个整数n,xn,x,之间用一个空格隔开。 输出格式 11个整数,表示xx出

洛谷P1966 [NOIP2013 提高组] 火柴排队

题链 若要将一个排列转换成另一个排列,一次只能交换相邻两个元素,例如将 a = {4, 3, 1, 2} 变成 b = {1, 3, 2, 4},最少需要交换 a或b 几步; 新建 pa[a[i]] = i 记录排名a[i]的位置,pb[b[i]] = i 记录排名b[i]的位置,令p[pa[i]] = pb[i](相当于映射)得到的p序列求逆序数则为答案; #include

P1983 [NOIP2013 普及组] 车站分级

  一开始想着记录一下每个站点的level,根据给出的关系进行调整,后来发现这种方法实际上稍微复杂一点的情况都解决不了,因为这里的关系是有连带的,处理A关系后可能破坏了B关系. 对于每一行数据,以"4 1 3 5 6"为例,它可以独立地表示这样的关系: 1,3,5,6站等级均高于2,4站,即在起点

【NOIP2013提高组】华容道

分析 一个比较显然的方式是 设 \(f_{i,j,x,y}\) 表示达到空格所处位置为 \((i,j)\) 且特殊格位置为 \(x,y\) 的状态的最少步数 一次可以交换空格和相邻格,代价为 \(1\),\(bfs\) 转移即可 但确实时间无法接受 我们想到转移时 当且仅当空格和特殊格相邻时特殊格的位置才可能变 所以我