NOIP 2015 提高组 初赛
疑难点 学习 感悟。
一、
3.
示例如下(来自自个的理解):
101.101 十进制 转十进制1*10^2+0*10^1+1*10^0+1*10^-1+0*10^-2+1*10^-3
101.101 二进制 转十进制1*2^2+0*2^1+1*2^0+1*2^-1+0*2^-2+1*2^-3
101.101 八进制 转十进制1*8^2+0*8^1+1*8^0+1*8^-1+0*8^-2+1*8^-3
101.101 十六进制 转十进制1*16^2+0*16^1+1*16^0+1*16^-1+0*16^-2+1*16^-3
题解如下:
0.1 二进制转十进制0*2^0+1*2^-1=0.5
A选项
0.8十六进制转十进制0*16^0+8*16^-1=0.5
4.
示例如下(来自自个的理解):
101.101 十进制 转十进制1*10^2+0*10^1+1*10^0+1*10^-1+0*10^-2+1*10^-3
101.101 二进制 转十进制1*2^2+0*2^1+1*2^0+1*2^-1+0*2^-2+1*2^-3
101.101 八进制 转十进制1*8^2+0*8^1+1*8^0+1*8^-1+0*8^-2+1*8^-3
101.101 十六进制 转十进制1*16^2+0*16^1+1*16^0+1*16^-1+0*16^-2+1*16^-3
题解如下:
D选项
1762 八进制转十进制1*8^3+7*8^2+6*8^1+2*8^0=1010
3F2十六进制转十进制3*16^2+15*16^1+2*16^0=1010
7.
(来自《算法竞赛入门经典》P155)
用递归定义 二叉树T 的先序遍历、中序遍历、后序遍历:
先序遍历 PreOrder(T)=T的根节点+PreOrder(T的左子树)+PreOrder(T的右子树)
中序遍历 InOrder(T)=InOrder(T的左子树)+T的根节点+InOrder(T的右子树)
后序遍历 PostOrder(T)=PostOrder(T的左子树)+PostOrder(T的右子树)+T的根节点
8.
(来自《啊哈!算法》P184)
满二叉树的严格定义是一棵深度为h且有2^h-1个结点的二叉树。如下图所示:
完全二叉树严格定义:若设二叉树的高度为h,除第h层外,其他各层(1-h-1)的结点数都达到最大个数,
第h层从右向左连续缺若干节点,则这个二叉树就是完全二叉树。
如下图所示:
9.
(来自《算法竞赛入门经典》P355-P356)
最小生成树:
在无向图中,连通且不含圈的图称为树(Tree)。给定无向图G=(V,E),连接G中所有点,且边集是E的子集的书称为G的生成树(Spanning Tree),而权值最小的生成树称为最小生成树(Minimal Spanning Tree,MST)。
10.
T(n)=T(n-1)+n
推导:
T(n)=T(n-2)+n-1+n
T(n)=T(n-3)+n-2+n-1+n
T(n)=T(n-4)+n-3+n-2+n-1+n
......
T(n)=T(1)+2+......+n-3+n-2+n-1+n
T(n)=T(0)+1+2+......+n-3+n-2+n-1+n
T(n)=1+1+2+......+n-3+n-2+n-1+n
T(n)=1+(1+n)*n/2
T(n)=(n^2+n+2)/2
故T(n)=O(n^2)
类似的一题,(来自《大话数据结构》P422)
T(n)<=2T(n/2)+n,T(1)=0
推导:
T(n)<=2*(2T(n/2/2)+n/2)+n=2*2T(n/2/2)+2n
T(n)<=2*2*(2T(n/2/2/2)+n/2/2)+2n=2*2*2T(n/2/2/2)+3n
T(n)<=2*2*2*(2T(n/2/2/2/2)+n/2/2/2)+3n=2*2*2*2T(n/2/2/2/2)+4n
......
T(n)<=2^tT(n/2^t)+tn
n/2^t=1
n=2^t
logn=tlog2
t=logn/log2
带入t值
T(n)<=2^tT(n/2^t)+tn=n*T(1)+nlogn/log2=nlogn/log2
T(n)<=O(nlogn)
二、
5.
(来自《啊哈!算法》P238)
二分图的定义是:如果一个图的所有顶点可以被分为X和Y两个集合,
并且所有边的两个顶点恰好一个属于集合X,另一个属于集合Y,
即每个集合内的顶点没有边相连,那么此图就是二分图。例子如下图所示:
(来自《数据结构(C语言版)》严蔚敏 吴伟民 P158)
n表示图中顶点数目,有n(n-1)/2条边的无向图称为完全图。
(来自《数据结构(C语言版)》严蔚敏 吴伟民 P159)
在无向图G中,如果从顶点v到顶点u有路径,则称v和u是连通的。如果对于图中任意两个顶点u、v,u和v都是连通的,则称G是连通图。示例如下:
(来自《啊哈!算法》P180)
树其实就是不包含回路的连通无向图。
示例如下:
左为树,右为图
三、
1.答案1075
容斥原理
2015-2015/4-2015/5-2015/6+2015/20+2015/12+2015/30-2015/60=1075
容斥原理不懂的,建议学习此文https://blog.youkuaiyun.com/mrcrack/article/details/80562324第16讲内容:第6章 容斥原理及应用
2019-2-15 23:00
1.基本思路,2015扣除能被4、5、6整除的数。
能被4整除的数有2015/4=503个;
能被5整除的数有2015/5=403个;
能被6整除的数有2015/6=335个;
能同时被4、5整除的数有2015/20=100个;
能同时被4、6整除的数有2015/12=167个;
能同时被5、6整除的数有2015/30=67个;
能同时被4、5、6整除的数有2015/60=33个;
能被4、5、6整除的数503+403+335-(100+167+67)+33=940个;
不能被4、5、6整除的数2015-940=1075个;
该题就算思路知晓,运算也容易出错。
能被4整除的数有2015/4=503个;
4 8 12 16 20 24 28 32 36 40
44 48 52 56 60 64 68 72 76 80
84 88 92 96 100 104 108 112 116 120
124 128 132 136 140 144 148 152 156 160
164 168 172 176 180 184 188 192 196 200
204 208 212 216 220 224 228 232 236 240
244 248 252 256 260 264 268 272 276 280
284 288 292 296 300 304 308 312 316 320
324 328 332 336 340 344 348 352 356 360
364 368 372 376 380 384 388 392 396 400
404 408 412 416 420 424 428 432 436 440
444 448 452 456 460 464 468 472 476 480
484 488 492 496 500 504 508 512 516 520
524 528 532 536 540 544 548 552 556 560
564 568 572 576 580 584 588 592 596 600
604 608 612 616 620 624 628 632 636 640
644 648 652 656 660 664 668 672 676 680
684 688 692 696 700 704 708 712 716 720
724 728 732 736 740 744 748 752 756 760
764 768 772 776 780 784 788 792 796 800
804 808 812 816 820 824 828 832 836 840
844 848 852 856 860 864 868 872 876 880
884 888 892 896 900 904 908 912 916 920
924 928 932 936 940 944 948 952 956 960
964 968 972 976 980 984 988 992 996 1000
1004 1008 1012 1016 1020 1024 1028 1032 1036 1040
1044 1048 1052 1056 1060 1064 1068 1072 1076 1080
1084 1088 1092 1096 1100 1104 1108 1112 1116 1120
1124 1128 1132 1136 1140 1144 1148 1152 1156 1160
1164 1168 1172 1176 1180 1184 1188 1192 1196 1200
1204 1208 1212 1216 1220 1224 1228 1232 1236 1240
1244 1248 1252 1256 1260 1264 1268 1272 1276 1280
1284 1288 1292 1296 1300 1304 1308 1312 1316 1320
1324 1328 1332 1336 1340 1344 1348 1352 1356 1360
1364 1368 1372 1376 1380 1384 1388 1392 1396 1400
1404 1408 1412 1416 1420 1424 1428 1432 1436 1440
1444 1448 1452 1456 1460 1464 1468 1472 1476 1480
1484 1488 1492 1496 1500 1504 1508 1512 1516 1520
1524 1528 1532 1536 1540 1544 1548 1552 1556 1560
1564 1568 1572 1576 1580 1584 1588 1592 1596 1600
1604 1608 1612 1616 1620 1624 1628 1632 1636 1640
1644 1648 1652 1656 1660 1664 1668 1672 1676 1680
1684 1688 1692 1696 1700 1704 1708 1712 1716 1720
1724 1728 1732 1736 1740 1744 1748 1752 1756 1760
1764 1768 1772 1776 1780 1784 1788 1792 1796 1800
1804 1808 1812 1816 1820 1824 1828 1832 1836 1840
1844 1848 1852 1856 1860 1864 1868 1872 1876 1880
1884 1888 1892 1896 1900 1904 1908 1912 1916 1920
1924 1928 1932 1936 1940 1944 1948 1952 1956 1960
1964 1968 1972 1976 1980 1984 1988 1992 1996 2000
2004 2008 2012
能被5整除的数有2015/5=403个;
5 10 15 20 25 30 35 40 45 50
55 60 65 70 75 80 85 90 95 100
105 110 115 120 125 130 135 140 145 150
155 160 165 170 175 180 185 190 195 200
205 210 215 220 225 230 235 240 245 250
255 260 265 270 275 280 285 290 295 300
305 310 315 320 325 330 335 340 345 350
355 360 365 370 375 380 385 390 395 400
405 410 415 420 425 430 435 440 445 450
455 460 465 470 475 480 485 490 495 500
505 510 515 520 525 530 535 540 545 550
555 560 565 570 575 580 585 590 595 600
605 610 615 620 625 630 635 640 645 650
655 660 665 670 675 680 685 690 695 700
705 710 715 720 725 730 735 740 745 750
755 760 765 770 775 780 785 790 795 800
805 810 815 820 825 830 835 840 845 850
855 860 865 870 875 880 885 890 895 900
905 910 915 920 925 930 935 940 945 950
955 960 965 970 975 980 985 990 995 1000
1005 1010 1015 1020 1025 1030 1035 1040 1045 1050
1055 1060 1065 1070 1075 1080 1085 1090 1095 1100
1105 1110 1115 1120 1125 1130 1135 1140 1145 1150
1155 1160 1165 1170 1175 1180 1185 1190 1195 1200
1205 1210 1215 1220 1225 1230 1235 1240 1245 1250
1255 1260 1265 1270 1275 1280 1285 1290 1295 1300
1305 1310 1315 1320 1325 1330 1335 1340 1345 1350
1355 1360 1365 1370 1375 1380 1385 1390 1395 1400
1405 1410 1415 1420 1425 1430 1435 1440 1445 1450
1455 1460 1465 1470 1475 1480 1485 1490 1495 1500
1505 1510 1515 1520 1525 1530 1535 1540 1545 1550
1555 1560 1565 1570 1575 1580 1585 1590 1595 1600
1605 1610 1615 1620 1625 1630 1635 1640 1645 1650
1655 1660 1665 1670 1675 1680 1685 1690 1695 1700
1705 1710 1715 1720 1725 1730 1735 1740 1745 1750
1755 1760 1765 1770 1775 1780 1785 1790 1795 1800
1805 1810 1815 1820 1825 1830 1835 1840 1845 1850
1855 1860 1865 1870 1875 1880 1885 1890 1895 1900
1905 1910 1915 1920 1925 1930 1935 1940 1945 1950
1955 1960 1965 1970 1975 1980 1985 1990 1995 2000
2005 2010 2015
能被6整除的数有2015/6=335个;
6 12 18 24 30 36 42 48 54 60
66 72 78 84 90 96 102 108 114 120
126 132 138 144 150 156 162 168 174 180
186 192 198 204 210 216 222 228 234 240
246 252 258 264 270 276 282 288 294 300
306 312 318 324 330 336 342 348 354 360
366 372 378 384 390 396 402 408 414 420
426 432 438 444 450 456 462 468 474 480
486 492 498 504 510 516 522 528 534 540
546 552 558 564 570 576 582 588 594 600
606 612 618 624 630 636 642 648 654 660
666 672 678 684 690 696 702 708 714 720
726 732 738 744 750 756 762 768 774 780
786 792 798 804 810 816 822 828 834 840
846 852 858 864 870 876 882 888 894 900
906 912 918 924 930 936 942 948 954 960
966 972 978 984 990 996 1002 1008 1014 1020
1026 1032 1038 1044 1050 1056 1062 1068 1074 1080
1086 1092 1098 1104 1110 1116 1122 1128 1134 1140
1146 1152 1158 1164 1170 1176 1182 1188 1194 1200
1206 1212 1218 1224 1230 1236 1242 1248 1254 1260
1266 1272 1278 1284 1290 1296 1302 1308 1314 1320
1326 1332 1338 1344 1350 1356 1362 1368 1374 1380
1386 1392 1398 1404 1410 1416 1422 1428 1434 1440
1446 1452 1458 1464 1470 1476 1482 1488 1494 1500
1506 1512 1518 1524 1530 1536 1542 1548 1554 1560
1566 1572 1578 1584 1590 1596 1602 1608 1614 1620
1626 1632 1638 1644 1650 1656 1662 1668 1674 1680
1686 1692 1698 1704 1710 1716 1722 1728 1734 1740
1746 1752 1758 1764 1770 1776 1782 1788 1794 1800
1806 1812 1818 1824 1830 1836 1842 1848 1854 1860
1866 1872 1878 1884 1890 1896 1902 1908 1914 1920
1926 1932 1938 1944 1950 1956 1962 1968 1974 1980
1986 1992 1998 2004 2010
能同时被4、5整除的数有2015/20=100个;
20 40 60 80 100 120 140 160 180 200
220 240 260 280 300 320 340 360 380 400
420 440 460 480 500 520 540 560 580 600
620 640 660 680 700 720 740 760 780 800
820 840 860 880 900 920 940 960 980 1000
1020 1040 1060 1080 1100 1120 1140 1160 1180 1200
1220 1240 1260 1280 1300 1320 1340 1360 1380 1400
1420 1440 1460 1480 1500 1520 1540 1560 1580 1600
1620 1640 1660 1680 1700 1720 1740 1760 1780 1800
1820 1840 1860 1880 1900 1920 1940 1960 1980 2000
能同时被4、6整除的数有2015/12=167个;
12 24 36 48 60 72 84 96 108 120
132 144 156 168 180 192 204 216 228 240
252 264 276 288 300 312 324 336 348 360
372 384 396 408 420 432 444 456 468 480
492 504 516 528 540 552 564 576 588 600
612 624 636 648 660 672 684 696 708 720
732 744 756 768 780 792 804 816 828 840
852 864 876 888 900 912 924 936 948 960
972 984 996 1008 1020 1032 1044 1056 1068 1080
1092 1104 1116 1128 1140 1152 1164 1176 1188 1200
1212 1224 1236 1248 1260 1272 1284 1296 1308 1320
1332 1344 1356 1368 1380 1392 1404 1416 1428 1440
1452 1464 1476 1488 1500 1512 1524 1536 1548 1560
1572 1584 1596 1608 1620 1632 1644 1656 1668 1680
1692 1704 1716 1728 1740 1752 1764 1776 1788 1800
1812 1824 1836 1848 1860 1872 1884 1896 1908 1920
1932 1944 1956 1968 1980 1992 2004
能同时被5、6整除的数有2015/30=67个;
30 60 90 120 150 180 210 240 270 300
330 360 390 420 450 480 510 540 570 600
630 660 690 720 750 780 810 840 870 900
930 960 990 1020 1050 1080 1110 1140 1170 1200
1230 1260 1290 1320 1350 1380 1410 1440 1470 1500
1530 1560 1590 1620 1650 1680 1710 1740 1770 1800
1830 1860 1890 1920 1950 1980 2010
能同时被4、5、6整除的数有2015/60=33个;
60 120 180 240 300 360 420 480 540 600
660 720 780 840 900 960 1020 1080 1140 1200
1260 1320 1380 1440 1500 1560 1620 1680 1740 1800
1860 1920 1980
2.
(思路来自《数据结构(C语言版)》严蔚敏 吴伟民)
递推公式得出如下
(1)0个结点f(0)=1
(2)1个结点f(1)=1
(3)2个结点,固定一个为根节点,两种情形,一个左子树,一个右子树。f(2)=f(1)*f(0)+f(0)*f(1)=2
(4)3个结点,f(3)=f(2)*f(0)+f(0)*f(2)+f(1)*f(1)=2*1+1*2+1*1=5
(5)4个结点,f(4)=f(3)*f(0)+f(0)*f(3)+f(2)*f(1)+f(1)*f(2)=5*1+1*5+2*1+1*2=14
(6)5个结点,f(5)=f(4)*f(0)+f(0)*f(4)+f(3)*f(1)+f(1)*f(3)+f(2)*f(2)=14*1+1*14+5*1+1*5+2*2=42
四、
2.
(来自《算法竞赛入门经典》P66)
函数的形参和在函数内声明的变量都是该函数的局部变量。无法访问其他函数的局部变量。
局部变量的存储空间是临时分配的,函数执行完毕时,局部变量的空间将被释放,其中的值无法保留到下次使用。
题中a的变化没有影响到p1,原因如上所示,故c1值不变。
题中*a影响的是p2指向的内存块,即c2里的值,故(*a)++对应的c2值要改变。
4.今日(2016.10.27)有重大突破,困扰已久的递归问题找到一种速度极快的解法。
以往的做法是自顶向下逐层递归,对于手算而言,运算量是天文级别的,第一次做就算能对,也不能保证第二次能对。
今日是自底向上,找规律,发现很快就能找到规律,在短时间内,只要运算不出现低级错误,很快就能解决问题。此法是偶然想到,但却解决了困扰已久的递归程序写结果问题。
此题做法如下,n=0,n=1,n=2,n=3,n=4,n=5求出相应结果。在求解的过程中能发现规律。
(1)n=0
fun(0,1,3)=0
(2)n=1
fun(1,1,3)=1 附带产物 fun(0,1,2)=0 fun(0,2,3)=0
(3)n=2
fun(2,1,3)=3 附带产物 fun(2,1,3)=3 fun(1,1,2)=1 fun(0,1,3)=0 fun(0,3,3)=0 fun(1,2,3)=1 fun(0,2,1)=0 fun(0,1,3)=0
(3)n=3
fun(3,1,3)=7 附带产物 fun(2,1,2)=3 fun(1,1,3)=1 fun(1,3,3)=1 fun(0,3,1)=0 fun(0,1,3)=0
fun(2,2,2)=3 fun(1,2,1)=1 fun(0,2,3)=0 fun(0,3,3)=0 fun(1,1,2)=1
(4)n=4
大胆猜想
fun(3,fromPos,toPos)=7
fun(2,fromPos,toPos)=3
fun(1,fromPos,toPos)=1
fun(0,fromPos,toPos)=0
很快写出
fun(4,1,3)=15
(5)n=5
继续猜
fun(4,fromPos,toPos)=15
fun(3,fromPos,toPos)=7
fun(2,fromPos,toPos)=3
fun(1,fromPos,toPos)=1
fun(0,fromPos,toPos)=0
很快写出
fun(5,1,3)=31
很高兴想到上述办法,困扰了有半年了,此类题目是最耗时,且准确率不高。
五、
1.读完题目,没明白题意,硬读程序,没读懂,但发现程序先处理lmax,再处理rmax,对两种处理可以看见的代码进行对比,发现具有对称性,先解决第二空rmax[i]=x[i],再解决第三空rmax[i]=rmax[i+1]+x[i],之后解决第四空rmax[i]=rmax[i+1],最后解决第一空rmax[n-1]=x[n-1],根据对称性,解决四空,还是很轻松,再读一遍程序,看懂不少,但细节上还有问题。
第五空4分,重读题目,发现输出是最大和,马上想到第五空应填lmax[i]+rmax[i],但对至少间隔1个数,有疑问,
将程序从ans=x[0]+x[2];开始重读一遍,启发很大,ans=x[0]+x[2];等价于ans=lmax[0]+rmax[2];马上将第五空进行修改lmax[i-1]+rmax[i+1],代入i=1进行检验lmax[0]+rmax[2],代入i=n-2进行检验lmax[n-3]+rmax[n-1],发现两个边界都挺合理,至此该题程序填空完毕。
但程序还有些细节问题,从解题角度而言,该题结束。
2.有迪杰斯特拉算法(参见《啊哈!算法》P155)基础,就算学习日期离考试比较久远,此题还是会比较简单。
第五空2分,其余3分,故第五空最简单,直接抄下行代码,改个不等号即可。dist[i]>dist[v]+w[i][j];
第一空,处赋值位置,扫描程序,多处出现v==-1,但没有v=-1的赋值,故该空v=-1;
第四空,程序中提到int used[MAXV];//记录结点是否已扩展(0:未扩展;1:已扩展)。
结点v进行扩展。
程序中始终找不到used[v]=1;故该空used[v]=1;
第二空,第三空,依据:每次从未扩展的结点中选取dist值最小的结点v进行扩展。
在所有没用过的结点中,选中最小距离的结点,
第二空dist[i]<dist[v]
第三空v=i;