有关重庆市信息竞赛高中组(noip)的问题!!!

有关重庆市信息竞赛高中组c++(noip)的问题!!!想拿到赛区2等奖,上次什么都没学进去凭感觉拿了3等奖,也去听了一些课,这次想拿2等奖,请推荐一些学习资料(只学初赛内容)像教科书,复习册,题集等,最好是淘宝上能买到的。你要是有最近的真题发给我也可以[email protected]。要是有什么绝版内部pdf也行。小弟只想拿个2等奖,希望大家帮帮忙!!!书最好是针对初赛的!电脑常识有关的资料也行!!!

我们老师写的,我正在学,老师讲一课做一课。一共10天,现有几 天,过一段时间补上。(给你qq吧)
本人打的,
no。1
一、学校网站网址:
外网:http://wyzxdj.gicp.net:88;内网:http://192.168.1.1:88
  知识点:
(1)http——超 文本 传输 协议,ftp——文件 传输 协议
(2)网站有两类:http网站(web网站)、ftp网站
(3)域名与IP地址(在网络上计算机IP是唯一的)
(4)DNS域名解析系统——把域名解析为IP地址
(5)端口:65536个端口(其中一部分系统使用),web网站默认使用80端口(两头可以省略),ftp网站默认使用21端口。
 
二、考试时间:
全国初赛(笔试、县级)10月的第3个星期六,2小时(100分)
全国复赛(上机、九江)11月的第3个星期六,上机3小时,四个大题(每题100分,共400分)
三、下载安装相关软件
下载安装FP——安装到D:下。注意:目录名为FP,复赛时有可能为PP
如果桌面有快捷方式,可以通过 右击→属性 获取路径。
四、计算机信息存储
计算机信息存储:文件形式(位置、名字)、表的形式(注册表、内存分配表、CMOS)
文件管理模式:通过文件夹(目录)来管理文件的
磁盘:分区使用。盘符(一个大写字母加:组成)
软驱(与软盘)分开:使用A与B,从C开始给硬盘(包含驱动器与盘片)和光驱(光驱与光盘分开)
每个分区都有一个根目录。形式:D:\A\B\C\1.txt
计算机中最高级文件夹是“桌面”
五、常用的DOS命令
1、操作系统:Windows---视窗操作系统(多任务、图形式)、DOS——磁盘操作系统(单任务、字符式)
2、微软公司——MicroSoft,简称MS
3、cmd——由Windows进入模拟DOS窗口(开始→运行→cmd→确定)
4、模拟DOS窗口与全屏模式互换:alt+回车
5、关闭模拟DOS窗口:exit
6、磁盘命令 D: (回车)
7、在DOS下查看文件(夹)名 dir——会用 dir/p/w
dir/p——纵向看(相当于widnows中的“详细信息”)
dir/w——横向看(相当于widnows中的“列表”)
dir/p/w
?如何区别文件(夹)
dir或dir/p——有<dir>就是目录或者没有大小
dir/w/p——有方括号的就是目录
8、改变目录命令 CD
cd 目录名——打开一个目录
cd \fp\bin\go32v2
cd.. 回到上一级
cd\ 回到根目录
9、查看文本文件内容。type 1.pas
六、启动fp
d:
cd\fp\bin\go32v2
fp
退出:alt+x (选择是否保存)
七、fp主菜单
alt+红色字母
File文件、Edit编辑、Search查找、Run运行、Compile编译、Debug调试、Tools工具、Option选项、Windows窗口、Help帮助
File——New新建、F2保存、Exit
Edit——Cut剪切、Copy复制、paste粘贴、Clear清除
删除单个,使用 退格键或delete键
删除一行,使用 ctrl+Y
选择操作:shift+方向键、home、end
Tools——ASCII table
F9——生成exe(先编译再链接)
=======================================================================
八、Free Pascal程序
1、程序由多条语句(简单语句和复合语句)组成;每条语句最后使用分号结束(end前可省略分号)。
2、程序结构:顺序结构、分支/选择结构、循环/重复结构、子程序结构(过程和函数)。
3、采取模块化思想、从上到下、逐步求精。
4、变量、常量问题
变量——单变量、数组变量、结构变量;命名:字母带头;全局变量、局部变量
5、要使用变量,必须先申请——合理定义(类型恰当---特别对于数组变量且个数很多)。
6、得不到满分的主要原因:有些情况有遗漏、变量定义范围小了、个数少了。
7、由begin……end.组成(end.整个程序中只能出现1次)
8、程序书写采用缩进式、使用空行分隔程序功能段
9、复赛要求:从.in文件中读取数据→编程处理→写到.out文件中
10、注释语句:单行使用 // ;多行使用{ }——用于调试
11、赋值语句: 变量使用“ :=”;常量使用“=”

12. 定义:
const pai=3.14;
var a:integer; //-3万2~3万2
b:longint; //-21亿~21亿
c:byte; //0~255
var x:array[3..10] of integer; // a[3]到a[10]
13、常见出错信息
(1)Syntax error, ; expected but BEGIN found 语法错误,预期出现分号(;)但找到了BEGIN——Begin前少了分号(;)
(2)Identifier not found INTEGER1 没找到标识符INTEGER1——标识符单词有错
(3)Illegal expression 非法的表达式——赋值语句使用了“=”
九、读数据讲解:2004第1题
(1)建立.in输入文件——建议使用edit unhappy.in
(2)使用type unhappy.in检查.in是否正确
(2)编程从.in中读取数据
var f:text; //定义一个变量f,用于操作文件
a:array[1..7,1..2] of byte;
i:byte;
begin
assign(f,'unhappy.in'); //指针指向文件
reset(f); // 指针指向第1个字符
for i:=1 to 7 do readln(f,a[i,1],a[i,2]);
close(f); //关闭指针
//显示读结果
for i:=1 to 7 do wrtieln(a[i,1],' ',a[i,2]);

end.
 
no.2

一、整型数据(复习)
var a:byte;
b:integer;
c:longint;
二、子界型数据(只能使用整型)
1..100

三、实型数据
说明:
(1)可以存放小数、也可以存放整型数据
(2)使用了“/”运算、sqrt()开平方,其结果必须使用实型变量保存
(3)使用整除 div、求余 mod,其结果可以使用整型变量存放
(4)在for …… to ……do……或for……downto……do……中,只能使用整型数据或整型变量
var a:single:
b:real;
c:double;
四、逻辑/布尔数据
说明:
(1)每个变量占用1个位。
(2)其结果不是true就是false
var a:boolean;
b:array[1..1000] of boolean;
逻辑运算:
(1)单目运算:not,非。书写:~、……
(2)双目运算:and, 与。书写:∧、∩、……,口诀:同真为真,其余为假(1真3假)——等于“乘法*”
(3)双目运算:or, 或。书写:∨、∪、……,口诀:同假为假,其余为真(1假3真)——类似“加法+”但1+1=1
(4)双目运算:xor, 异或。书写:⊕、……, 口诀:同假异真。 (2真2假)——类似“加法+”但1⊕1=0
知识:
(1)如果进行双目逻辑运算,逻辑表达式必须使用()。例: a=0 and b 是错误的。正确的应是:(a=0) and b
(2)初赛试题中进行逻辑运算时:可以将true用1替换,false用0替换,and/∧/∩用*替换,or/∨/∪用+替换,xor用⊕,按从左到右运算(除方括号以外)
(3)以下例题解题思路:
下列逻辑运算不正确的是(______)。(说明:“•”为逻辑与/逻辑乘,“+”为逻辑或/逻辑加,“⊕”为“逻辑异或”,字母上面的横线为“逻辑非”)
A A•(A + B)= A
B A +(A•B)= A
C A•(B + C)= A•B + A•C
D A +(B•C)=(A + B)•(A + C)
E A + 1 = A
思路:分A=1或A=0两种情况讨论
例题讲解(问题求解):
(取石子游戏) 现有5堆石子,石子数依次为3,5,7,19,50甲乙两人轮流从任一堆中任取(每次只能取自一堆,不能不取), 取最后一颗石子的一方获胜。甲先取,问甲有没有获胜策略(即无论乙怎样取,甲只要不失误,都能获胜)?如果有,甲第一步应该在哪一堆里取多少?请写出你的结果:
甲(______)获胜策略(填“有”或“没有”)。
如有获胜策略,第一步应该在第(______)堆中取(______)颗石子。
解答:博弈原理。讲求平衡性,对所有数进行xor,其值=0时为平衡状态。谁打破平衡状态谁输!
 
五:字符型数据
说明:只存放一个字符。
var a:char;
====================================================================
六:字符串型数据
说明:
(1)不超过255个字符
(2)定长和变长
(3)自动分割为字符数组。相当于字符数组,设s为字符串数据,则s[2]表示s中的第2个字符
(4)函数不能单独成句,但可以用于赋值语句或输出语句中。
过程单独成句,就是一条完成的语句。

(5)求长函数length(s)
(6)查找函数pos(s1,s)——s1子串,s源串,返回找到的第1个位置(返回0,表示没找到)
(7)连接函数concat(s1,s2,s3,……)——将s2,s3……依次加在s1后面,最后返回s1。可以使用s1=s1+s2+s3+……
(8)截取函数copy(s,i,L)——在S中的第i个位置开始截取长为L的字符串
(9)删除过程delete(s,i,L)——删除S中第i个开始长为L的字符串,返回S
(10)插入过程insert(s1,s,i)——将s1插入在s中的第i个位置,返回S
(11)数字变字串过程str(12,s)——返回s='12'
(12)数值字串变数字过程val('125',a)——返回a=125

var a:string; //变长
var b:string[20]; //定长
七、分支结构
(1)2分支——else前不能有分号
if 条件 then 语句1;

if 条件 then 语句1 else 语句2;

if 条件 then
begin
语句组1;
end
else
begin
语句组2;
end;

if 条件1 then
语句组1;
else if 条件2 then
语句组2;
……
else
语句组;

(2)多分支
case 表达式 of
常量1:语句1;
常量2:语句2;
……
常量:语句;
else 语句n+1 //可选项
end;
多分支应用:根据年、月输出该月多少天?

case m of //m代表月
1,3,5,7,8,10,12:days:=31; //days代表该月天数
4,6,9,11:days:=30;
2:if (y mod 400=0) or ((y mod 4=0) and (y mod 100<>0)) then days:=29 else days:=28;
end;
八、循环/重复结构
(1)限定次数
for … to … do 语句组; //循环变量自动累加1,前小后大。
for … downto … do 语句组; //循环变量自动累减1,前大后小。
(2)不定次数
while 条件 do 语句组;

repeat
语句组;
end;
(3)退出循环使用 break; 同时退出多层循环,一般采用设置一个逻辑变量+break来实现。
九:函数与过程区别
(1)关键字不同
(2)函数有数据类型,过程没有。
(3)过程通过参数带来结果(必须使用var),而函数只能通过函数名带回一个结果。
(4)过程单独成句子;函数只能用于赋值语句或输出语句中。
 
十、2011年初赛阅读程序第三题讲解
原题:
begin
readln(s);
m1=' ';
m2=' ';

for i:=1 to length(s) do
if s[i]>m1 then
begin
m2:=m1;
m1:=s[i];
end;
else if s[i]>m2 then
m2:=s[i];

writeln(ord(m1),' ',ord(m2));
end.
 
十一、2011年初赛阅读程序第四题讲解

可以将原题进行“处理”(将循环结构改成顺序结构),增加易读性,但必须与原题完全等价。

说明:本题使用了函数,并且使用“递归调用”——自己调用自己
function r(n:integer):integer;
var i:integer;
begin
if n<=5 then
begin
r:=n;
exit; //出口
end;

if r(n-1)<0 then begin r:=1; exit; end; //①出口
if r(n-2)<0 then begin r:=2; exit; end; //②出口
if r(n-3)<0 then begin r:=3; exit; end; //③出口
if r(n-4)<0 then begin r:=4; exit; end; //④出口
if r(n-5)<0 then begin r:=5; exit; end; //⑤出口

r:=-1; //出口
end;
begin
readln(n);
writeln(r(n));
end.
分析:函数r(n)有多个出口!。
(1)输入值为7或16
(2)n<=5时,返回原值,即:
r(5)=5
r(4)=4
r(3)=3
r(2)=2
r(1)=1
(3)n=6时,
计算r(5)——返回5,①不执行,执行下一步
计算r(4)——返回4,②不执行,执行下一步
计算r(3)——返回3,③不执行,执行下一步
计算r(2)——返回2,④不执行,执行下一步
计算r(1)——返回1,⑤不执行,执行下一步
所以r=-11,即r(6)=-1
(4)n=7时,
计算r(6)——返回-1,①执行,所以r(7)=1
(5)n=8时,
计算r(7)——返回1
计算r(6)——返回-1,②执行,所以r(8)=2
(6)n=9时,
计算r(8)——返回2
计算r(7)——返回1
计算r(6)——返回-1,③执行,所以r(9)=3
(7)n=10时,
计算r(9)——返回3
计算r(8)——返回2
计算r(7)——返回1
计算r(6)——返回-1,④执行,所以r(10)=4
(8)n=11时,
计算r(10)——返回4
计算r(9)——返回3
计算r(8)——返回2
计算r(7)——返回1
计算r(6)——返回-1,⑤执行,所以r(11)=5
(9)n=12时,
计算r(11)——返回5
计算r(10)——返回4
计算r(9)——返回3
计算r(8)——返回2
计算r(7)——返回1
r=-1,即r(12)=-1
可以得出规律:
n=6 7 8 9 10 11 12 13 14 15 16
r(n)=-1 1 2 3 4 5 -1 1 2 3 4 5 -1 1 2 3 4 5
 
no.3

一、 ASCII码
将键盘上的所有键进行编号,就可看作ASCII码,必须记住:
空格 20H,即32
数字 0~9,ASCII码30H~39H,即48~57
字母 A~Z,ASCII码41H~5AH,即65~90
字母 a~z,ASCII码61H~6AH,即97~122
二、信息的单位
位——bit/b,表示0或1
字节——byte/B,网速 Mbps其中bps:位每秒,1B=8bit
扇区——512B
千字节——KB,1K=1024B=2扇区,需要记住:2E+10=1024
兆字节——MB,1M=1024K
吉字节——GB,1G=1024M
特字节——TB,1T=1024G
三、字符ASCII码占用大小
1个英文字符占用1个字节,1个汉字占用2个字节。
四、字库
点阵字(横向的点*纵向的点)、曲线字
24*24点阵,需要多少存储空间。24*24/8B=72字节,但ASCII码占2B
五、进制——2、8、10、16进制

在计算机内部,一切信息存取、处理和传递的形式是2进制。

机内码:使用94区*94位,其中16区1位,就是“啊”,一级汉字按拼音、二级汉字按部首

ASCII码是7位编号,存储时使用8位(即1B),其中最高位(左起第1位用于区分英文、中文)

地址码:以字节为单位,以16进制为准,从0#开始。
例:128KB的存储器用十六进制表示,它的最大的地址码是(______)。
知识点:凡是2的倍数,如从1#编号,地址码形式:10000……, 如果从0#开始,地址码形式:FFFFF……
128KB约等于128*1000B
FFFFF=15^5>10^5=100000B
 
六、2009年初赛阅读程序第2题
原代码(处理):

b[0]:=2; b[1]:=3; b[2]:=5;

 for i := 0 to 2 do begin
  a[i] := 0;
  for j := 0 to i do begin
   inc(a[i], b[j]);
   inc(b[a[i] mod 3], a[j]);
  end;
 end;
分析:采用列表法:
i j a[0] a[1] a[2] b[0] b[1] b[2]
初始化 0 0 0 2 3 5
0 0 2         7
1 0   2       9
1   5       14
2 0     2     16
1     5     21
2     26     47
tmp := 1;

 for i := 0 to 2 do begin
  a[i] := a[i] mod 10;
  b[i] := b[i] mod 10;
  tmp := tmp * (a[i] + b[i])
 end;
功能:个位数之和相乘
tmp:=(2+2)*(5+3)*(6+7)=4*8*13=416
================================================================================
七、常用进制——2、8、10、16进制
(1) 书写方式:(101)2、(127)8……
书写方式:(101)2、(101)16、……
书写方式:101B、101O、101D、101H……
(2)n进制:只能使用0、1、2、3、4、5……n-1、小数点、正负号
(3)进行四则运算:逢n进一、借一当n
加法:先本位相加,再考虑进位
减法:不够减先借位,再相减
乘法:先各位相乘,再相加、最后考虑进位
(4)进制转换
第1种类型:2、8、16→10进制
第2种类型:10→2、8、16进制
第3种类型:8→2→16进制

经验:公式条
2进制: ……8 4 2 1.1/2 1/4 ……
8进制: …… 64 8 1.1/8 1/64 ……
16进制: …… 256 16 1.1/16 1/256 ……
例题讲解:
与十进制数1770对应的八进制数是(______)。
A 3350
B 3351
C 3352
D 3540
分析:1770 mod 8 就是答案的个数,1770 mod 64就是答案的十位.

(2010)16+(32)8的结果是(______)。
A (8234)10
B (202B)16
C (20056)8
D (100000000110)2
分析:题目的值对8求余,结果=2
B、C、D对8求余<>2,所以答案为A
(3725)8+(B)16的运算结果是(______)。
A (3736)8
B (2016)10
C (1111110000)2
D (3006)10
E (7B0)16
分析:值=(3725)8+11=(3740)8=(011 111 100 000)2,答案为E

(2004)10 +(32)16的结果是(______)。
A (2036)10
B (2054)16
C (4006)10
D (100000000110)2
E (2036)16
分析:值=2004+50=2054,A/B/C/E不对
运算(-17) MOD (-4) 的结果是(______)。
A 7
B 4
C 1
D -1
分析:a mod b的正负以左边的a为准

八、写文件
assign(f,'tree.out'); rewrite(f);
……
close(f)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-17
为什么只想拿二等奖呢?老实说,一等奖和二等奖分数差别不大,分数差距也就一道半题目的分数一下吧,要是想那奖的话,做题是王道。最好能找一个专一的题库连续做一百题以上(强力推荐tyvj,最近有个noip贴吧比赛,很多奖品),这一百道题目要综合各种类型的,建议多做搜索和dp题目,联赛常考。不要觉得100道很多,其实平均下来一天也就那么几道题目,要是刷水题包括在内还得多刷几十道,多做几道才熟悉套路和模式,才能在考试中立马想到算法,并且熟练地编出来并调试成功。好吧,祝LZ多多AC!
第2个回答  2011-08-04
赛区三等奖,如果我没记错是只要选手得分大于0分就可以得的,如果要练习的话,可以去http://www.tyvj.cn/ 做题,这个题库是有自己的评测系统的,而且根据题的类型和难度进行了区分,如果只要得二等奖,可以多做些难度为小的题,主要攻模拟和字符串类型的题,最后动态规划弄懂01背包问题就行了追问

大于0分就有奖是不可能的我们学校当时有200考吧,和我一起的3个打酱油的同学的没拿到3等奖不过的确有点水! 有没有推荐的教材?

追答

那我就不清楚了,可能因为地区不同所以不同吧,四川这边是的。教材什么的我知道的不是这个语言的,如果你要把语言换成pascal的话,我到可以告诉你一些不错的教材。不过这个网站真的不错,它的前身vijos超好用,当初我们大一届的学长暑假期间连做200道,然后一等奖~
我去问了我一个学C++语言的学弟,他说可以用 潘嘉杰的《易学C++》,比较适合从零学起,他获得过二等奖

本回答被提问者采纳
第3个回答  2011-08-05
初赛哪有资料。。。。。去背往年的初赛题吧
复赛的话把最基础的弄好,感觉图论动规没啥必要,做出来就一等了。。。
把搜索啦模拟啦字符串啦学扎实,还有基础数据结构 图论把算法学会,也不算麻烦
相似回答