2013NOIP——序列重排
NOIP 2013 解题报告
![NOIP 2013 解题报告](https://img.taocdn.com/s3/m/a66adadc49649b6648d747fe.png)
Solution By Doveccl
什么是逆序对呢?
在一个数组 A 中,如果 i>j 且 Ai>Aj ,则称(Ai,Aj)是一个逆序对 比如数组 A={4,1,3,2},有(4,1) , (4,3) , (4,2) , (3,2) 4 个逆序对。 求逆序对可以用定义法,双重循环搜索,O(n2):
for(int i=1;i<n;i++) for(int j=i+1;i<=n;j++) if(a[i]>a[j]) ans++;
第 6 页共 26 页
NOIP 2013 senior
if(b[i]<=b[j]) a[k++]=b[i++]; else {
a[k++]=b[j++]; sum+=(m-i+1); sum%=mod; } } while(i<=m) a[k++]=b[i++]; while(j<=r) a[k++]=b[j++]; return sum; } inline LL merge_sort(int *a,int l,int r,int *b) { LL sum=0; if(l<r) { int m=(l+r)>>1; sum+=merge_sort(a,l,m,b); sum+=merge_sort(a,m+1,r,b); sum+=merge(a,l,m,r,b); sum%=mod; } return sum; } int main() { freopen("match.in","r",stdin); freopen("match.out","w",stdout); int n,i; LL sum; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]), aa[i]=i; for(i=1;i<=n;i++) scanf("%d",&b[i]), bb[i]=i; qs(a,aa,1,n); qs(b,bb,1,n); for(i=1;i<=n;i++) b[aa[i]]=bb[i]; sum=merge_sort(b,1,n,temp); printf("%I64d",sum); return 0; }
第十九届2013全国青少年信息学奥林匹克联赛初赛试题C++及解析
![第十九届2013全国青少年信息学奥林匹克联赛初赛试题C++及解析](https://img.taocdn.com/s3/m/dd2535f8312b3169a551a49f.png)
第十九届全国青少年信息学奥林匹克联赛初赛提高组C++语言试题竞赛时间:2013年10月13日14:30~16:30选手注意:●试题纸共有12页,答题纸共有2页,满分100分。
请在答题纸上作答,写在试题纸上的一律无效。
●不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。
一、单项选择题(共15题,每题1.5分,共计22.5分;每题有且仅有一个正确选项)1.一个32位整型变量占用()个字节。
A.4B.8C.32D.1282.二进制数11.01在十进制下是()。
A.3.25B.4.125C.6.25D.11.1253.下面的故事与()算法有着异曲同工之妙。
从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:?从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:‘从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事....’?A.枚举B.递归C.贪心D.分治4.1948年,()将热力学中的熵引入信息通信领域,标志着信息论研究的开端。
A.冯·诺伊曼(John von Neumann)B.图灵(Alan Turing)C.欧拉(Leonhard Euler)D.克劳德·香农(Claude Shannon)5.已知一棵二叉树有2013个节点,则其中至多有()个节点有2个子节点。
A.1006B.1007C.1023D.10246.在一个无向图中,如果任意两点之间都存在路径相连,则称其为连通图。
右图是一个有5个顶点、8条边的连通图。
若要使它不再是连通图,至少要删去其中的()条边。
A.2B.3C.4D.57.斐波那契数列的定义如下:F1=1,F2=1,Fn=Fn–1+Fn–2(n≥3)。
如果用下面的函数计算斐波那契数列的第n项,则其时间复杂度为()。
int F(int n){if(n<=2)return 1;elsereturn F(n-1)+F(n-2);}A.O(1)B.O(n)C.O(n2)D.O(F n)8.二叉查找树具有如下性质:每个节点的值都大于其左子树上所有节点的值、小于其右子树上所有节点的值。
2009_2014NOIP初赛提高组C 语言试题和参考答案解析45
![2009_2014NOIP初赛提高组C 语言试题和参考答案解析45](https://img.taocdn.com/s3/m/5c998936de80d4d8d15a4ff8.png)
2009-2013年NOIP初赛提高组C++语言试题2013第十九届全国青少年信息学奥林匹克联赛初赛提高组C++语言试题竞赛时间:2013年10月13日14:30~16:30选手注意:试题纸共有12页,答题纸共有2页,满分100分。
请在答题纸上作答,写在试题纸上的一律无效。
不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。
一、单项选择题(共15题,每题1.5分,共计22.5分;每题有且仅有一个正确选项)1.一个32位整型变量占用()个字节。
A.4 B.8 C.32 D.1282.二进制数11.01在十进制下是()。
A.3.25 B.4.125 C.6.25 D.11.1253.下面的故事与()算法有着异曲同工之妙。
从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:?从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:‘从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事....’?A.枚举B.递归C.贪心D.分治4.1948年,()将热力学中的熵引入信息通信领域,标志着信息论研究的开端。
A.冯·诺伊曼(John von Neumann)B.图灵(Alan Turing)C.欧拉(Leonhard Euler)D.克劳德·香农(Claude Shannon)5.已知一棵二叉树有2013个节点,则其中至多有()个节点有2个子节点。
A.1006B.1007C.1023D.10246.在一个无向图中,如果任意两点之间都存在路径相连,则称其为连通图。
右图是一个有5个顶点、8条边的连通图。
若要使它不再是连通图,至少要删去其中的()条边。
A.2B.3C.4D.57.斐波那契数列的定义如下:F1=1,F2=1,Fn=Fn–1+Fn–2(n≥3)。
如果用下面的函数计算斐波那契数列的第n项,则其时间复杂度为()。
int F(int n){if(n<=2)return 1;elsereturn F(n-1)+F(n-2);})A.O(1)B.O(n)C.O(n2)D.O(Fn8.二叉查找树具有如下性质:每个节点的值都大于其左子树上所有节点的值、小于其右子树上所有节点的值。
2013NOIP初赛提高组试题解析
![2013NOIP初赛提高组试题解析](https://img.taocdn.com/s3/m/95c4d9a0dd3383c4bb4cd2b1.png)
19.2 十九届提高组一、单项选择题(共15题,每题1.5分,共计22.5分;每题有且仅有一个正确选项)1.一个32位整型变量占用( A )个字节。
A.4 B.8 C.32 D.1282.二进制数11.01在十进制下是( A )。
A.3.25 B.4.125 C.6.25 D.11.1253.下面的故事与( B )算法有着异曲同工之妙。
从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:“从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:‘从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事…………………………’”A.枚举B.递归C.贪心D.分治4.1948年,( D )将热力学中的熵引入信息通信领域,标志着信息论研究的开端。
A.冯•诺伊曼(John von Neumann) B.图灵(Alan Turing)C.欧拉(Leonhard Euler) D.克劳德•香农(Claude Shannon)【分析】香农信息论鼻祖5.已知一棵二叉树有2013个节点,则其中至多有( A )个节点有2个子节点。
A.1006 B.1007 C.1023 D.1024【分析】(1)树根深度为0,深度为10的满二叉树节点总数2047;(2)本题树深为10的完全二叉树,与满二叉树相比少了34个节点,(3)深度为9的满二叉树节点总数量为1023;(4)1023-(34/2)=10066.在一个有向图中,如果任意两点之间都存在路径相连,则称其为连通图。
右图是一个有5个顶点、8条边的连通图。
若要使它不再是连通图,至少要删去其中的( B )条边。
A.2 B.3 C.4 D.5【分析】要使图不联通,只要其中某一个节点不连通即可,所有顶点度最少是3,所以最少需要删除3条边7.斐波那契数列的定义如下:F1=1,F2=1,F n=F n-1+F n-2(n≥3)。
如果用下面的函数计算斐波那契数列的第n项,则其时间复杂度为( D )。
NOIP提高组初赛历年试题及答案完善题篇
![NOIP提高组初赛历年试题及答案完善题篇](https://img.taocdn.com/s3/m/dffbbf303169a4517723a3c5.png)
for (i = m; i>= 1; i--){
used[data[i]] = false;
for (j =data[i]+1; j <= n; j++) if (!used[j]){
used[j] =true;
data[i] = j;
flag = true;
break;
}
if (flag)
{
for (k = i+1;k <= m; k++)
solve(left, j –1, deep + 1);
if(j<right)
solve(j+ 1, right, deep + 1);
}
int main()
{
inti;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
maxDeep=0;
solve(1,n,1);
cout<<maxDeep<<' '<<num<<endl;
}
void push()
for (j = 1; j<=n; j++) if (!used[j]){
data[k] = j;
used[j] =true;
break;
}
break;
}
}
}
}
NOIP2012-2.新壳栈 小 Z 设计了一种新的数据结构“新壳栈”。首先,它和传统的栈一样支持压入、弹 出操作。此外,其栈顶的前 c 个元素是它的壳,支持翻转操作。其中,c> 2 是 一个固定的正整数,表示壳的厚度。小 Z 还希望,每次操作,无论是压入、弹 出还是翻转,都仅用与 c 无关的常数时间完成。聪明的你能帮助她编程实现“新 壳栈”吗? 程序期望的实现效果如以下两表所示。其中,输入的第一行是正整数 c,之后每 行输入都是一条指令。另外,如遇弹出操作时栈为空,或翻转操作时栈中元素不 足 c 个,应当输出相应的错误信息。
NOIP初赛复习13排序与算法复杂度
![NOIP初赛复习13排序与算法复杂度](https://img.taocdn.com/s3/m/9e21a041be23482fb5da4c11.png)
NOIP初赛复习13排序与算法复杂度排序排序(Sorting)是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个项值有序的序列。
简单排序算法简单排序算法包括冒泡排序、插入排序、选择排序。
这三种算法容易理解、编写方便,适用于数据规模较小的情形。
冒泡排序基本思想:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
排序方法:依次比较相邻的两个数,将大数放在前面,小数放在后面。
首先比较第1个和第2个数,将大数放前,小数放后。
然后比较第2个数和第3个数,将大数放前,小数放后,如此继续,直至比较最后两个数,将大数放前,小数放后,此时第一趟结束,在最后的数必是所有数中的最小数。
重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再大于第2个数),将大数放前,小数放后,一直比较到最小数前的一对相邻数,将大数放前,小数放后,第二趟结束,在倒数第二个数中得到一个新的最小数。
如此下去,直至最终完成排序。
效率分析空间效率:仅用了一个辅助交换单元。
时间效率:总共要进行n-1趟冒泡,对n个记录的表进行一趟冒泡需要n-1次数值大小比较。
移动次数:最好情况下,待排序列已有序,不需移动。
直接插入排序基本思想:依次将每个记录插入到一个有序中去。
就是说,第i遍整理时,A1,A2,...,A i-1已经是排好序的子序列;取出第i个元素A i,在已排好序的子序列为A i找到一个合适的位置,并将它插到该位置上。
易知上述排序当i=1时实际上为空操作,故可直接从i=2开始。
排序方法:每步将一个待排序的记录按其关键字的大小插到前面已经排序的序列中的适当位置,直到全部记录插入完毕为止。
效率分析空间效率:仅用了一个辅助单元。
时间效率:向有序表中逐个插入记录的操作,进行了n-1趟,每趟操作分为比较关键码和移动记录,而比较的次数和移动记录的次数取决于待排序列按关键码的初始排列。
第十九届全国青少年信息学奥林匹克联赛初赛提高组(C++)精编版
![第十九届全国青少年信息学奥林匹克联赛初赛提高组(C++)精编版](https://img.taocdn.com/s3/m/927bae57aaea998fcd220e18.png)
2013第十九届全国青少年信息学奥林匹克联赛初赛提高组C++语言试题竞赛时间:2013年10月13日14:30~16:30选手注意:试题纸共有12页,答题纸共有2页,满分100分。
请在答题纸上作答,写在试题纸上的一律无效。
不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。
一、单项选择题(共15题,每题1.5分,共计22.5分;每题有且仅有一个正确选项)1.一个32位整型变量占用()个字节。
A.4 B.8 C.32 D.1282.二进制数11.01在十进制下是()。
A.3.25 B.4.125 C.6.25D.11.1253.下面的故事与()算法有着异曲同工之妙。
从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:?从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:‘从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事....’?A.枚举B.递归C.贪心D.分治4.1948年,()将热力学中的熵引入信息通信领域,标志着信息论研究的开端。
A.冯·诺伊曼(John von Neumann)B.图灵(Alan Turing)C.欧拉(Leonhard Euler)D.克劳德·香农(Claude Shannon)5.已知一棵二叉树有2013个节点,则其中至多有()个节点有2个子节点。
A.1006B.1007C.1023D.10246.在一个无向图中,如果任意两点之间都存在路径相连,则称其为连通图。
右图是一个有5个顶点、8条边的连通图。
若要使它不再是连通图,至少要删去其中的()条边。
A.2B.3C.4D.57.斐波那契数列的定义如下:F1=1,F2=1,Fn=Fn–1+Fn–2(n≥3)。
如果用下面的函数计算斐波那契数列的第n项,则其时间复杂度为()。
int F(int n){if(n<=2)return 1;elsereturn F(n-1)+F(n-2);})A.O(1)B.O(n)C.O(n2)D.O(Fn8.二叉查找树具有如下性质:每个节点的值都大于其左子树上所有节点的值、小于其右子树上所有节点的值。
NOIP2013初赛普及组C++题目及答案
![NOIP2013初赛普及组C++题目及答案](https://img.taocdn.com/s3/m/46594bf8f12d2af90342e69b.png)
第十九届全国青少年信息学奥林匹克联赛初赛普及组C++语言试题竞赛时间:2013 年10 月13 日14:30~16:30选手注意:试题纸共有9 页,答题纸共有2 页,总分值100 分。
请在答题纸上作答,写在试题纸上的一律无效。
不得使用任何电子设备〔如计算器、、电子词典等〕或查阅任何书籍资料。
一、单项选择题〔共20 题,每题 1.5 分,共计30 分;每题有且仅有一个正确选项〕1. 一个32 位整型变量占用〔〕个字节。
A. 4B. 8C. 32D. 1282. 二进制数11.01 在十进制下是〔〕。
A. 3.25B. 4.125C. 6.25D. 11.1253. 下面的故事与〔〕算法有着异曲同工之妙。
从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:‘从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事....’A. 枚举B. 递归C. 贪心D. 分治4. 逻辑表达式〔〕的值与变量A 的真假无关。
A. (A∨B)∧﹃AB. (A∨B)∧﹃BC. (A ∧B) ∨(﹃A ∧B)D. (A ∨B)∧﹃A ∧B5. 将〔2, 6, 10, 17〕分别存储到某个地址区间为0~10 的哈希表中,如果哈希函数h(x) =〔〕,将不会产生冲突,其中a mod b 表示a 除以b 的余数。
A. x mod 11B. x2 mod 11C. 2x mod 11D. |√2| mod 11 ,其中√X表示√X下取整6. 在十六进制表示法中,字母 A 相当于十进制中的〔〕。
A. 9B. 10C. 15D. 167. 以下图中所使用的数据结构是〔〕。
A. 哈希表B. 栈C. 队列D. 二叉树8. 在Windows 资源管理器中,用鼠标右键单击一个文件时,会出现一个名为“复制”的操作选项,它的意思是〔〕。
A. 用剪切板中的文件替换该文件B. 在该文件所在文件夹中,将该文件克隆一份C. 将该文件复制到剪切板,并保留原文件D. 将该文件复制到剪切板,并删除原文件9. 已知一棵二叉树有10 个节点,则其中至多有〔〕个节点有 2 个子节点。
NOIP2013提高组复赛试题
![NOIP2013提高组复赛试题](https://img.taocdn.com/s3/m/99572337876fb84ae45c3b3567ec102de2bddf12.png)
NOIP2013提高组复赛试题CCF 全国信息学奥林匹克联赛(NOIP2013)复赛提高组 day11.转圈游戏(circle.cpp/c/pas)【问题描述】n 个小伙伴(编号从0 到n-1)围坐一圈玩游戏。
按照顺时针方向给 n 个位置编号,从 0 到 n-1。
最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此类推。
游戏规则如下:每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第1 号位置小伙伴走到第m+1 号位置,……,依此类推,第n ?m号位置上的小伙伴走到第 0 号位置,第n-m+1 号位置上的小伙伴走到第 1 号位置,……,第 n-1 号位置上的小伙伴顺时针走到第m-1 号位置。
现在,一共进行了10^k 轮,请问x 号小伙伴最后走到了第几号位置。
【输入】输入文件名为circle.in。
输入共1 行,包含4 个整数n、m、k、x,每两个整数之间用一个空格隔开。
【输出】输出文件名为c ircle.out。
输出共1行,包含1个整数,表示10k 轮后x号小伙伴所在的位置编号。
【数据说明】对于30%的数据,0 < k < 7;对于80%的数据,0 < k < 107;对于100%的数据,1 < n< 1,000,000,0 <="" <="" <="" n,0="" p="" x="" ≤="" ,0="">2.火柴排队(match.cpp/c/pas)【问题描述】涵涵有两盒火柴,每盒装有n 根火柴,每根火柴都有一个高度。
现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:,其中 ai 表示第一列火柴中第i 个火柴的高度,bi 表示第二列火柴中第 i 个火柴的高度。
noip2013 模拟试题
![noip2013 模拟试题](https://img.taocdn.com/s3/m/73d5ff37f56527d3240c844769eae009581ba22d.png)
noip2013 模拟试题[title]: NOIP2013 模拟试题[introduction]:NOIP(全国青少年信息学奥林匹克竞赛)是中国信息学竞赛中最具影响力的比赛之一。
NOIP2013 模拟试题是该年度参赛选手备战竞赛的重要资料。
本篇文章将重点分析并解答该模拟试题中的关键问题,旨在帮助读者更好地理解和应对类似题型。
[body]:一、题目一题目描述:在一个长度为 n(n<=1000)的字符串中,求出最长的回文子串。
解析与思路:1. 回文子串:指正序和倒序读都是一样的字符串,例如"aba";2. 暴力法:遍历所有子串,判断是否为回文子串,记录最长长度;3. 动态规划法:利用之前判断好的回文子串信息,通过状态转移方程进行计算;4. Manacher 算法:利用回文串的对称性,减少重复计算的次数。
二、题目二题目描述:给定两个字符串 s 和 t,找出它们的最长公共子序列。
如果不存在公共子序列,则返回 0。
解析与思路:1. 公共子序列:指两个字符串中都存在的一个子序列;2. 动态规划法:利用之前计算好的最长公共子序列信息,通过状态转移方程进行计算;3. 二维数组法:使用二维数组记录两个字符串的最长公共子序列信息;4. 降维优化:使用一维数组记录最长公共子序列信息,减少空间复杂度。
三、题目三题目描述:给定一个非负整数数组,选择两个元素使它们的和最大,且两个元素不能相邻。
解析与思路:1. 最大和问题:求解元素之和的最大值;2. 动态规划法:通过状态转移方程求得最优解;3. 状态压缩:使用两个变量保存之前两个状态,减少存储空间;4. 考虑边界条件:数组为空、数组长度为1等情况需要特殊处理。
四、题目四题目描述:给定一个二维矩阵,找出矩阵中的最大连续子矩阵的和。
解析与思路:1. 最大子矩阵和问题:求解满足条件的最大连续子矩阵的和;2. 动态规划法:通过状态转移方程逐步计算最大子矩阵和;3. 二维前缀和优化:通过计算二维前缀和矩阵,避免重复计算;4. 记录子矩阵位置:通过记录起始位置和终止位置,可以输出最大连续子矩阵。
NOIP2013全国青少年信息学奥林匹克联赛初赛参考答案(提高组PASCAL)
![NOIP2013全国青少年信息学奥林匹克联赛初赛参考答案(提高组PASCAL)](https://img.taocdn.com/s3/m/8a8f8845cf84b9d528ea7aa0.png)
(或count1 = count1 – 1,
或--count1)
2
(4)
dec(count2)
(或count2 := count2 – 1)
count2--
(或count2 = count2 – 1,
或--count2)
2
(5)
cur1 := a[j]
cur1 = a[j]
3
Pascal语言
C++语言
C语言
分值
1.
(1)
n – p +i
2
(2)
i– p + 1
2
(3)
a[i– p]
2
(4)
j <= end2
3
(5)
i(或start2,或end1 + 1)
3
(6)
j – 1
3
2.
(1)
j - 1
3
(2)
cur1
3
(3)
dec(count1)
(或count1 := count1 – 1)
第十九届全国青少年信息学奥林匹克联赛初赛
提高组参考答案
一、单项选择题(共15题,每题1.5分,共计22.5分)
1
2
3
4
5
6
7
8
A
A
B
D
A
B
D
B
9
10
11
12
13
14
15
D
D
C
B
D
B
B
二、不定项选择题(共5题,每题1.5分,共计7.5分;每题有一个或多个正确选项,没有部分分)
NOIP2013普及组,复赛试题
![NOIP2013普及组,复赛试题](https://img.taocdn.com/s3/m/14cbb241c850ad02de804170.png)
CCF全国信息学奥林匹克联赛(NOIP2013)复赛普及组(请选手务必仔细阅读本页内容)注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) 64x2 Dual Core CPU 5200+,2.71GHz,内存2G,上述时限以此配置为准。
4、只提供Linux格式附加样例文件。
5、特别提醒:评测在NOI Linux下进行。
1.记数问题(count.cpp/c/pas)【问题描述】试计算在区间1到n的所有整数中,数字x(0≤x≤9)共出现了多少次?例如,在1到11中,即在1、2、3、4、5、6、7、8、9、10、11中,数字1出现了4次。
【输入】输入文件名为count.in。
输入共1行,包含2个整数n、x,之间用一个空格隔开。
【输出】输出文件名为count.out。
输出共1行,包含一个整数,表示x出现的次数。
【数据说明】对于100%的数据,1≤n≤1,000,000,0≤x≤9。
2.表达式求值(expr.cpp/c/pas)【问题描述】给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
【输入】输入文件为expr.in。
输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“*”,且没有括号,所有参与运算的数字均为0到231-1之间的整数。
输入数据保证这一行只有0~ 9、+、*这12种字符。
【输出】输出文件名为expr.out。
输出只有一行,包含一个整数,表示这个表达式的值。
注意:当答案长度多于4位时,请只输出最后4位,前导0不输出。
【输入输出样例1】【输入输出样例2】【输入输出样例说明】样例1计算的结果为8,直接输出8。
样例2计算的结果为1234567891,输出后4位,即7891。
样例3计算的结果为1000000004,输出后4位,即4。
Noip 2013 解题报告与参赛总结(PASCAL版)
![Noip 2013 解题报告与参赛总结(PASCAL版)](https://img.taocdn.com/s3/m/da9f7d521711cc7931b716b1.png)
Noip 2013 解题报告与参赛总结(pascal版)Noip结束也有一段时间了,网上也能查到很多解题报告。
虽然意义不大,但就当做是一点纪念吧,纪念我的第一次Noip。
(也很可能是最后一次了)Day1T1:应该不难看出是快速幂,只要把模板背过就可以轻松AC了。
属于例行水题。
T2:首先分析出移动的结果应使得列中最大的数在一起,次大的数在一起,以此类推。
因为要使化简下来的式子中两数之积最大。
然后就是YY出只要移动一列即可达到效果。
在此基础上处理发现实际是求序列中的逆序对数。
这也不难,方法有两种,一种是树状数组或线段树,另一种更简单,代码也更容易实现。
是通过归并排序求逆序对。
只需要在归并排序中加一个计数器ANS。
在“并”这一部分中记录一下即可,详细的看代码。
T3:本次考试中较难的一道题,SPFA可以做到40-60分。
并查集至少60分,听神犇说可以AC。
比较常用的方法是树链剖分或树上倍增。
还是说一下倍增吧(因为前一种太wo简bu单hui)。
首先跑一遍最大生成树。
(显然答案都只会是这棵树上边的权值)。
然后处理倍增的数据,要记录两个内容,一个是2^k的祖先,另一个是到祖先的路上最小权值。
我用的是DFS的方法。
每处理完一个节点就把信息传递给儿子。
中间顺便记录每个节点的深度。
倍增时先把询问的两个点处理到同一深度,然后同时向上倍增,直至倍增的祖先恰好相同,同时ANS不断记录更小的权值。
Day2T1:竟然不是数论!数学弱渣太感谢出题人了。
方法很简单,从左到右扫一遍,如果当前点的高度大于前一个,就直接给ANS 加上差值。
T2:竟然也是O(N)!欺骗蒟蒻的感情!和T1一样简单,YY出ANS即为拐点的个数。
记录拐点时注意一下,处理连续相同的等高的花。
T3:我认为是这次比赛最难的一道题,因为我写的时间最长。
(其实是自己代码能力太渣)。
这题看了大神的题解才算有点眉目,朴素的BFS在大数据上明显超时,如果你不满足于60分的话就要压缩搜索中的冗余状态。
NOIP2013第十九届全国青少年信息学奥林匹克联赛复赛试题提高组_day2
![NOIP2013第十九届全国青少年信息学奥林匹克联赛复赛试题提高组_day2](https://img.taocdn.com/s3/m/dc30f0d27f1922791688e832.png)
CCF全国信息学奥林匹克联赛(NOIP2013)复赛提高组 day2(请选手务必仔细阅读本页内容)注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) 64x2 Dual Core CPU 5200+,2.71GHz,内存2G,上述时限以此配置为准。
4、只提供Linux格式附加样例文件。
5、特别提醒:评测在NOI Linux下进行。
1.积木大赛(block.cpp/c/pas)【题目描述】春春幼儿园举办了一年一度的“积木大赛”。
今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是ℎi。
在搭建开始之前,没有任何积木(可以看成n块高度为0的积木)。
接下来每次操作,小朋友们可以选择一段连续区间[L,R],然后将第L块到第R块之间(含第L块和第R块)所有积木的高度分别增加1。
小M是个聪明的小朋友,她很快想出了建造大厦的最佳策略,使得建造所需的操作次数最少。
但她不是一个勤于动手的孩子,所以想请你帮忙实现这个策略,并求出最少的操作次数。
【输入】输入文件为block.in输入包含两行,第一行包含一个整数n,表示大厦的宽度。
第二行包含n个整数,第i个整数为ℎi。
【输出】输出文件为block.out仅一行,即建造所需的最少操作数。
【样例解释】其中一种可行的最佳方案,依次选择[1,5] [1,3] [2,3] [3,3] [5,5]【数据范围】对于30%的数据,有1≤n≤10;对于70%的数据,有1≤n≤1000;对于100%的数据,有1≤n≤100000,0≤ℎi≤10000。
(flower.cpp/c/pas)【问题描述】花匠栋栋种了一排花,每株花都有自己的高度。
花儿越长越大,也越来越挤。
c03-NOIP2013初赛答案解析
![c03-NOIP2013初赛答案解析](https://img.taocdn.com/s3/m/776fb4e519e8b8f67c1cb9f2.png)
一、单选题(15*1.5)1、A,一个字节有8个bit,32位整型变量占用4个字节,故选A。
2、A,二进制11.01转为十进制,(11.01)2 = 1*2+1+0*0.5+1*0.25 = (3.25)10 。
3、B,老和尚给小和尚讲的故事里边有故事本身,递归是函数内部调用函数本身,故选B,递归。
4、D,香农信息论鼻祖。
5、A,一定是满二叉树时拥有2个字节点的节点数最多,最下一层会有2013-1023=990个节点,于是倒数第二层会有990/2=495个节点有2个字节点,从第1层到倒数第三层共有1023-2^9=511个节点,且这些节点都是用2个子节点的节点,所以共有495+511=1006个,选A。
6、B,要使图不联通,只要其中某一个节点不连通即可,所有顶点度最少是3,所以最少需要删除3条边,选B。
7、D,此题最开始一眼扫到的时候脑子进水,跟学生将选B,O(n),实际上不是,计算F1需要1次,计算F2需要一次,计算Fn需要计算F(n-1)的次数加上F(n-2)的次数,所以其实就是计算Fn次,于是答案选择D,至于这个Fn到底是多大,数学上可以计算,它等于O(((1+sqrt(5))/2)^n).8、B,这个必须是B,没有什么好说的,中序遍历保证左边都是小于根的,右边都是大于根的,所以可以保证是一个有序序列。
9、D,A项6和17对11取余都是6发生冲突,B项10的平方和17的平方对11取余都是1发生冲突,C项6的两倍和17的两倍对11取余都是1发生冲突,D 项分别为1,2,3,4,不冲突。
10、D,IPV6地址是128位的。
谢谢网友指正!11、C,二分为6个和6个的顶点,此时边最多,有36条边。
12、B,我的学生几乎全选A去了,因为之前讲题只介绍过ASCII码,但是看到统一二字也应该想到Uni...前缀啊。
13、D,64位非零浮点数强制转换成32位浮点数,两个数会有大小上的细微差别,但不会发生符号变化,因为有专门的符号位。
NOIP数学--排列组合
![NOIP数学--排列组合](https://img.taocdn.com/s3/m/6ad12b510b1c59eef9c7b42a.png)
因此:不可能出现i<j<k,aJ<ak<ai的情况
栈模型算法
算法先产生1-n共n个数的全排列,对于每种排列, 若符合前面所讲的出栈规则,那么这个排列便是一个 可能的出栈序列。计数器加1,当n个全排列列举结束 时,得到问题的解。
递归算法
令f(m,n)表示m个人手持50的钞票。N个人手持 100的钞票时总共的方案数。
i个位置的数。 函数done(i)执行时,首先判断j是否在该排列以前
的几个位置上出现过,若出现则说明j不可能出现在当 前位置上,此时j值增1重复以上判断,j=n时回溯;若 j没有在该排列以前的位置上出现,则该位置上的值就 是j,后判断递归的层数i与r的值是否相等。若i=r,输 出一个新的排列并回溯。若i<r,则继续进行递归。
解题思路: 左→右 4步 下→上 3步 无论怎么选择均为右4+上3。 0—向右走1—向上走 所以可以走法可以看作由01组 成的字符串 即所求方案数为4个0和3个1组成的 7位字符串的个数。 C(7,4)=?
排列组合生成算法
R-排列生成算法: 采用回溯法生成从n中选r个元素的所有排列情况: n个元素用1,2,…,n来表示 函数done递归的层数i表示当前正在生成排列中第
f(1,2)0 f(2,1)2 f(1,2) 0 f(2,1)2
我们发现f(3,2)等节点有重复计算,课件递归算法产生大量的数据冗余, 这些冗余数据是限制递归算法的主要因素,从而导致了模型3虽进行了数学抽象, 但是算法实现起来的效率并不高。如何解决呢?计算中保留数值---采用递推法保 证同一个数据只计算一次。
错位排列生成算法
noip2013普及组复赛试题word版
![noip2013普及组复赛试题word版](https://img.taocdn.com/s3/m/bff2bf6401f69e314232940f.png)
2014年程序设计小组期末考察试题一、记数问题描述试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1 到 11 中,即在1、2、3、4、5、6、7、8、9、10、11 中,数字 1 出现了 4 次。
【输入】输入文件名为 count.in。
输入共 1 行,包含 2 个整数 n、x,之间用一个空格隔开【输出】输出文件名为 count.out。
输出共 1 行,包含一个整数,表示 x 出现的次数。
【输入输出样例】count.in count.out11 1 4限制每个测试点1s。
【数据说明】对于 100%的数据,1≤ n ≤ 1,000,000,0 ≤ x ≤ 9。
二、表达式求值描述给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
【输入】输入文件为 expr.in。
输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘,且没有括号,所有参与运算的数字均为 0 到 231-1 之间的整数。
输入数据保法运算符“*”证这一行只有 0~ 9、+、*这 12 种字符。
【输出】输出文件名为 expr.out。
输出只有一行,包含一个整数,表示这个表达式的值。
注意:当答案长度多于 4 位时,请只输出最后 4 位,前导 0 不输出。
【输入输出样例 1】expr.in expr.out1+1*3+4 8【输入输出样例 2】expr.in expr.out1+1234567890*1 7891【输入输出样例 3】expr.in expr.out1+1000000003*1 4【输入输出样例说明】样例 1 计算的结果为 8,直接输出 8。
样例 2 计算的结果为 1234567891,输出后 4 位,即 7891。
样例 3 计算的结果为 1000000004,输出后 4 位,即 4。
【数据范围】对于 30%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100;对于 80%的数据,0≤表达式中加法运算符和乘法运算符的总数≤1000;对于 100%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100000。