tceic.com
学霸学习网 这下你爽了
相关标签
当前位置:首页 >> 政史地 >>

NOIP提高组04-09第一题


关于竞赛中不同语言使用限制的说明 一.关于使用 Pascal 语言与编译结果的说明 1. 对于 Pascal 语言的程序, 当使用 IDE 和 fpc 编译结果不一致时, 以 fpc 的编译结果为准。 2.允许使用数学库(uses math 子句),以及 ansistring。但不允许使用编译开关(最后测试 时 pascal 的范围检查开关默认关闭:{$R-,Q-,S-}) ,也

不支持与优化相关的选项。 二.关于 C++语言中模板使用的限制说明 1.允许使用的部分: 标准容器中的布尔集合,迭代器,串,流。 相关的头文件:<bitset > <iterator > <string > <iostream > 2.禁止使用的部分: 序列:vector,list,deque 序列适配器:stack, queue, priority_queue 关联容器:map, multimap, set, multiset 拟容器:valarray 散列容器:hash_map, hash_set, hash_multimap, hash_multiset 所有的标准库算法 相关头文件:<vector > <list > <deque > <stack > <map > <set > <algorithm > 模拟法 所谓模拟算法即按题目的叙述条件和过程按步就班完成算法与程序设计。 此类问题的特点,问题描述特别的长,在考场上主要考核心态、阅读能力、细节处理能 力、逻辑整理问题能力,这些能力是基本功,因些模拟问题在 NOIP 中经常出现。即按照试 题要求展开模拟过程。编程者要忠实于原题,认真审题,千万不要疏漏任何条件,精心设 计方便模拟的数据结构。“直叙式模拟”的难度取决于模拟对象所包含的动态变化的属性 有多少,动态属性愈多,则难度愈大。 2009 潜伏者 (spy.pas/c/cpp) 【问题描述】 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。 历尽艰险 后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原信息经过加密后在网络上发送, 原信息的内容与加密后所 得的内容均由大写字母‘A’-‘Z’构成(无空格等其他字符) 。 2. S 国对于每个字母规定了对应的“密字” 。加密的过程就是将原信息中的所有字 母替换为其对应的“密字” 。 3. 每个字母只对应一个唯一的“密字”, 不同的字母对应不同的“密字” 。 “密字” 可以和原字母相同。 例如,若规定‘A’的密字为‘A’,‘B’的密字为‘C’ (其他字母及密字略) ,则 原信息“ABA”被加密为“ACA” 。 现在, 小 C 通过内线掌握了 S 国网络上发送的一条加密信息及其对应的原信息。 小 C 希 望能通过这条信息,破译 S 国的军用密码。小 C 的破译过程是这样的:扫描原信息,对于 原信息中的字母 x(代表任一大写字母) ,找到其在加密信息中的对应大写字母 y,并认 为在密码里 y 是 x 的密字。如此进行下去直到停止于如下的某个状态: 1. 所有信息扫描完毕, ‘A’-‘Z’ 所有 26 个字母在原信息中均出现过并获得了

相应的“密字” 。 2. 所有信息扫描完毕,但发现存在某个(或某些)字母在原信息中没有出现。 3. 扫描中发现掌握的信息里有明显的自相矛盾或错误 (违反 S 国密码的编码规则) 。 例如某条信息“XYZ”被翻译为“ABA”就违反了“不同字母对应不同密字”的规则。 在小 C 忙得头昏脑涨之际, R 国司令部又发来电报, 要求他翻译另外一条从 S 国刚刚 截取到的加密信息。现在请你帮助小 C:通过内线掌握的信息,尝试破译密码。然后利用破 译的密码,翻译电报中的加密信息。 【输入】 输入文件名 spy.in,共 3 行,每行为一个长度在 1 到 100 之间的字符串。 第 1 行为小 C 掌握的一条加密信息。 第 2 行为第 1 行的加密信息所对应的原信息。 第 3 行为 R 国司令部要求小 C 翻译的加密信息。 输入数据保证所有字符串仅由大写字符‘A’-‘Z’构成,且第 1 行长度与第 2 行相等。 【输出】 输出文件 spy.out 共 1 行。 若破译密码停止时出现 2,3 两种情况,请你输出“Failed” (不含引号,注意首字母大写, 其他小写) 。 否则请输出利用密码翻译电报中加密信息后得到的原信息。 【输入输出样例 1】 spy.in AA AB EOWIE 【输入输出样例 2】 spy.in QWERTYUIOPLKJHGFDSAZXCVBN ABCDEFGHIJKILMNOPQRSTUVWXY DSLIEWO 【输入输出样例 3】 spy.in MSRTZCJKPFLQYVAWBINXUEDGHOOILSMIJFRCOPPQCEUNYDUMPP YIZSDWAHLNOVFUCERKJXQMGTBPPKOIYKANZWPLLVWMQJFGQYLL FLSO spy.out NOIP spy.out Failed spy.out Failed

题意简述: 密码的编码规则: 1.原信息的内容与加密后所得的内容均由大写字母构成。 2.对于每个字母规定了对应的“密字”,加密的过程就是将原信息中的所有字母替 换为其对应的“密字”。 3. 每个字母只对应一个唯一的“密字”, 不同的字母对应不同的“密字”。 “密字” 可以和原字母相同。 如此进行下去直到停止于如下的某个状态: 1. 所有信息扫描完毕,所有 26 个字母在原信息中均出现过并获得了相应的“密

字”。 2. 所有信息扫描完毕,但发现存在某些字母在原信息中没有出现。 3. 扫描中发现掌握的信息里有错误。 要求破译密码,翻译另外一条加密信息。 算法: #include <stdlib.h> #include <iostream> using namespace std; string a,b,s; char table[91];//每个密文字符对应的原文字符,方便翻译密文} bool flag[91];//原文字符标志} int main() { int i,j; cin>>a>>b>>s; memset(table,0,sizeof(table)); for (i=0;i<a.length();i++) if (table[a[i]]==0) table[a[i]]=b[i] ;//密文对应原文} else if (table[a[i]]!=b[i]) //出现重复} { cout<<"Failed"; break; } for (i=0;i<b.length();i++) flag[b[i]]=true;//标识原文用到字符} for (j='A';j<='Z';j++) //如果有未用到字符} if (!flag[j]) { cout<<"Failed";break; } for (i=0;i<s.length();i++) cout<<table[s[i]]; cout<<endl; //翻译密文} system("pause"); return 0; } 2008 笨小猴 (wird.pas/c/cpp) 【问题描述】 笨小猴的词汇量很小, 所以每次做英语选择题的时候都很头疼。 但是他找到了一种方法, 经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设 maxn 是单词中出现次数最多的字母的出现次数,minn 是单词中出现次数最少的字母的出现次数,如果 maxn-minn 是一个质数,那么笨小猴就认 为这是个 Lucky Word,这样的单词很可能就是正确的答案。 【输入】 输入文件 word.in 只有一行, 是一个单词, 其中只可能出现小写字母, 并且长度小于 100。

【输出】 输出文件 word.out 共两行,第一行是一个字符串,假设输入的的单词是 Lucky Word, 那么输出“Lucky Word” ,否则输出“No Answer” ; 第二行是一个整数,如果输入单词是 Lucky Word,输出 maxn-minn 的值,否则输出 0。 【输入输出样例 1】 word.in error word.out Lucky Word 2

【输入输出样例 1 解释】 单词 error 中出现最多的字母 r 出现了 3 次,出现次数最少的字母出现了 1 次,3-1=2,2 是 质数。 【输入输出样例 2】 word.in Olympic word.out No Answer 0

【输入输出样例 2 解释】 单词 olympic 中出现最多的字母 i 出现了 2 次,出现次数最少的字母出现了 1 次,2-1=1,1 不是质数。 【问题描述】 输入一个由小写字母构成的字符串,统计出现最多与最少字母的个数,若两数之差为质数, 输出“Lucky Word”和差值;否则输出“No Answer”和 0. 【题目类型】 模拟 【建议编程时间】 10 分钟(细心一些,避免出错) 。 【解题分析】 1、读入字符串(文件) 2、构造一个数组,记录 a-z 各字符出现的次数。枚举字符串中每个字符,将该字符对应数 组元素加一。 3、枚举数组中 a-z,找出最大值和非零最小值,求出它们的差。 4、判断差值是否为素数,数据规模很小,可用试除法。注意 0,1 的特殊情况。 5、输出,注意大小写、换行符。 # include<stdio.h> #include<string.h> using namespace std; #include <iostream.h> int fun(long n) { long i; if (n<2) return 0; for (i=2;i<=n-1;i++) if (n%i==0) return 0; return 1; }

int main() { char st[10000]; long max,min,i; long a[26]; char ch; freopen("word8.in","r",stdin); freopen("word.out","w",stdout); cin>>st; memset(a,0,sizeof(a)); for (i=1;i<= strlen(st);i++) a[st[i]]++; max=0; min=101; for (ch='a' ;ch<= 'z';ch++) if (a[ch]>0) { if (a[ch]>max) max=a[ch]; if (a[ch]<min) min=a[ch]; } if (fun(max-min)) { cout<<"Lucky Word"<<endl; cout<<max-min; } else { cout<<"No Answer"<<endl; cout<<"0"; } } 2007 统计数字 (count.pas/c/cpp) 【问题描述】 某次科研调查时得到了 n 个自然数,每个数均不超过 1500000000(1.5*109) 。已知不相 同的数不超过 10000 个, 现在需要统计这些自然数各自出现的次数, 并按照自然数从小到大 的顺序输出统计结果。 【输入】 输入文件 count.in 包含 n+1 行; 第一行是整数 n,表示自然数的个数; 第 2~n+1 每行一个自然数。 【输出】 输出文件 count.out 包含 m 行(m 为 n 个自然数中不相同数的个数) ,按照自然数从小到大

的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。 【输入输出样例】 count.in 8 2 4 2 4 5 100 2 100 count.out 23 42 51 100 2

【限制】 40%的数据满足:1<=n<=1000 80%的数据满足:1<=n<=50000 100%的数据满足:1<=n<=200000,每个数均不超过 1500 000 000(1.5*109) #include<stdio.h> #include<string.h> #define LEN 200000 #include<iostream.h> int a[LEN],temp,mid; void quicksort(int*pData,int left,int right) { int i,j; int middle,iTemp; i=left; j=right; middle=pData[(left+right)/2]; //求中间值 do{ while((pData[i]<middle)&&(i<right))//从左扫描大于中值的数 i++; while((pData[j]>middle) && (j>left))//从右扫描大于中值的数 j--; if(i<=j)//找到了一对值 { iTemp=pData[i]; pData[i]=pData[j]; pData[j]=iTemp;//交换 i++; j--; } }while(i<=j);//如果两边扫描的下标交错,就停止(完成一次) if(left<j) quicksort(pData,left,j);//当左边部分有值(left<j),递归左半边 if(right>i) quicksort(pData,i,right);//当右边部分有值(right>i),递归右半边 }

int main() { int i,j,n,sum; freopen("count1.in","r",stdin); cin>>n; for (i=0;i<n;i++) cin>>a[i]; quicksort(a,0,n-1); //调用快排 freopen("count.out","w",stdout); for (i=sum=0;i<n;i++) //统计不同数字的个数 if (a[i+1]!=a[i]) sum++; for (n=1,i=0,j=0;i<sum;i++,j++) //边统计边输出 { while (a[j+1]==a[j]) {n++; j++;} cout<<a[j]<<" "<<n<<endl; n=1; } return 0; } 2006 能量项链 (energy.pas/c/cpp) 【问题描述】 在 Mars 星球上,每个 Mars 人都随身佩带着一串能量项链。在项链上有 N 颗能量珠。 能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两 颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸 盘是 Mars 人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出 可以被吸盘吸收的能量。如果前一颗能量珠的头标记为 m,尾标记为 r,后一颗能量珠的头 标记为 r,尾标记为 n,则聚合后释放的能量为 m ? r ? n(Mars 单位) ,新产生的珠子的头 标记为 m,尾标记为 n。 需要时,Mars 人就用吸盘夹住相邻的两颗珠子,通过聚合得到能量,直到项链上只剩 下一颗珠子为止。显然,不同的聚合顺序得到的总能量是不同的,请你设计一个聚合顺序, 使一串项链释放出的总能量最大。 例如:设 N=4,4 颗珠子的头标记与尾标记依次为(2,3) (3,5) (5,10) (10, 2)。我们用记号⊕表示两颗珠子的聚合操作,(j⊕k)表示第 j,k 两颗珠子聚合后所释放 的能量。则第 4、1 两颗珠子聚合后释放的能量为: (4⊕1)=10*2*3=60。 这一串项链可以得到最优值的一个聚合顺序所释放的总能量为 ((4⊕1)⊕2)⊕3)=10*2*3+10*3*5+10*5*10=710。 【输入文件】 输入文件 energy.in 的第一行是一个正整数 N(4≤N≤100) ,表示项链上珠子的个 数。第二行是 N 个用空格隔开的正整数,所有的数均不超过 1000。第 i 个数为第 i 颗珠子 的头标记(1≤i≤N) ,当 i<N 时,第 i 颗珠子的尾标记应该等于第 i+1 颗珠子的头标记。 第 N 颗珠子的尾标记应该等于第 1 颗珠子的头标记。 至于珠子的顺序,你可以这样确定:将项链放到桌面上,不要出现交叉,随意指定第一

颗珠子,然后按顺时针方向确定其他珠子的顺序。 【输出文件】 输出文件 energy.out 只有一行,是一个正整数 E(E≤2.1*109) ,为一个最优聚合 顺序所释放的总能量。 【输入样例】 4 2 3 5 10 【输出样例】 710 分析 记 head[i]为第 i 颗能量珠的首标记,也同时是它前面那颗能量珠的尾标记。记录 Energy[i,j]为从以 Head[i]为首标记的能量珠开始顺时针数到以 Head[j]为尾标记的能量珠 为止所有能量珠组成的串合并后放出的最大能量。那么对于 Energy[i,j] ,若先合并从以 Head[i]为首标记的能量珠开始顺时针数到以 Head[k]为尾标记的能量珠为止的串,在合并 以 Head[k]为首标记的能量珠开始顺时针数到以 Head[j]为尾标记的能量珠为止的串,然后 将这两颗合并后的能量珠合并,放出的能量为 Energy[i,k]+Energy[k,j]+Head[i]*Head[k]*Head[j]。也就是说,状态转移方程为 Energy[i,j]=Max{Energy[i,k]+Energy[k,j]+Head[i]*Head[k]*Head[j]} (i<=k<=j (i<j), k<i or k>j (i>=j))。 计算 Energy[i,j]时,只会用到含有能量珠数目比它少的串在数组中的值,所以可以以 串的能量珠数目为顺序规划,即按照 k|(k+i) mod n=j 的顺序进行规划。 评论 如果枚举将能量项链变为串的开链位置,需要约 n/2 倍计算量,得到一个 O(n4)的时 间复杂度。这是不需要的。 一个较优的贪心近似算法是每次找首标记最小的能量珠与它前面的能量珠合并。对于 NOIP 中 30% 数据是正确的。一个典型的反例是 n=4,Head={10,3,2,3} ,贪心算法得到 3*2*3+10*3*3+10*10*3=408,而最优解为 10*3*2+10*2*3+10*10*3=420。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define maxn 101 int n; int a[maxn],b[2*maxn]; long sum[maxn][maxn]; long globalmax = 0; void Initialize() { int i; FILE *fin = fopen("energy.in","r"); fscanf(fin,"%d",&n); for (i=1;i<=n;i++) fscanf(fin,"%d",&a[i]); fclose(fin); }

void predoing(int s) { int i,j; for (i=0;i<2*n;i++) b[i+1]=a[(i+s)%n+1]; memset((void*)sum,0,sizeof(sum)); } long mdfs(int l,int r) { int i,j; long t,max=0; if (l==r) return 0; if (sum[l][r]>0) return sum[l][r]; for (i=l;i<r;i++) { t = mdfs(l,i)+mdfs(i+1,r)+b[l]*b[i+1]*b[r+1]; if (t>max) max=t; } sum[l][r]=max; return sum[l][r]; } void Compute() { int i; long t; for (i=0;i<n;i++) { predoing(i); t = mdfs(1,n); if (t>globalmax) globalmax=t; } } void Output() { FILE *fout = fopen("energy.out","w"); fprintf(fout,"%ld",globalmax); fclose(fout); } int main() { Initialize(); Compute(); Output(); return 0; } 2005 谁拿了最多奖学金

(Scholar.pas/c) 【问题描述】 某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的 条件各自不同: 1) 院士奖学金,每人 8000 元,期末平均成绩高于 80 分(>80) ,并且在本学期内发表 1 篇或 1 篇以上论文的学生均可获得; 2) 五四奖学金,每人 4000 元,期末平均成绩高于 85 分(>85) ,并且班级评议成绩高 于 80 分(>80)的学生均可获得; 3) 成绩优秀奖,每人 2000 元,期末平均成绩高于 90 分(>90)的学生均可获得; 4) 西部奖学金,每人 1000 元,期末平均成绩高于 85 分(>85)的西部省份学生均可 获得; 5) 班级贡献奖,每人 850 元,班级评议成绩高于 80 分(>80)的学生干部均可获得; 只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获 得多项奖学金。例如姚林的期末平均成绩是 87 分,班级评议成绩 82 分,同时他还是一位学 生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是 4850 元。 现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学 能满足获得奖学金的条件) 。 【输入文件】 输入文件 scholar.in 的第一行是一个整数 N(1 <= N <= 100) ,表示学生的总数。接下 来的 N 行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩, 是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成 的长度不超过 20 的字符串 (不含空格) ; 期末平均成绩和班级评议成绩都是 0 到 100 之间的 整数(包括 0 和 100) ;是否是学生干部和是否是西部省份学生分别用一个字符表示,Y 表 示是,N 表示不是;发表的论文数是 0 到 10 的整数(包括 0 和 10) 。每两个相邻数据项之 间用一个空格分隔。 【输出文件】 输出文件 scholar.out 包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名 学生获得的奖金总数。 如果有两位或两位以上的学生获得的奖金最多, 输出他们之中在输入 文件中出现最早的学生的姓名。第三行是这 N 个学生获得的奖学金的总数。 【样例输入】 4 YaoLin 87 82 Y N 0 ChenRuiyi 88 78 N Y 1 LiXin 92 88 N N 0 ZhangQin 83 87 Y N 1 【样例输出】 ChenRuiyi 9000 28700 [问题评估] 这个题目据问题本身而言是相当简单的,没有牵涉到过多的算法,属于普及型试题。 同时也是对实际问题一种分析和判断。总的来看,本题在方向上,向现实问题迈出了一步, 是信息学和生活有了更多的联系。 <题意分析>

给出 N(1≤N≤100)个人的情况,按照 5 条不同的奖学金条件发奖金(可重复得奖) , 求得到最多奖学金的人是谁,并求总奖学金数。 <算法分析> 这是一道简单题,没有什么更好或更坏的算法。只需按照实际情况模拟即可,每人判断 5 个条件, 该发多少发多少就行了。 要注意的是每人最多得 15850 元, 总数最多 1585000 元, 注意长整的使用。 <参考程序> #include <stdio.h> #define MAXN 100 /*最大人数*/ FILE *fpi,*fpo; char name[MAXN+1][21]; /*人名*/ int n; int main(){ long s=0,max=0,maxi, money; int i,mark,clmark,paper; char g,w; fpi=fopen("scholar.in","r"); fpo=fopen("scholar.out","w"); fscanf(fpi,"%d",&n); for(i=1;i<=n;i++){ money=0; fscanf(fpi,"%s %d %d %c %c %d",name[i],&mark,&clmark,&g,&w,&paper); if(mark>80 && paper>0) money+=8000; /*判断各个奖*/ if(mark>85 && clmark>80) money+=4000; if(mark>90) money+=2000; if(mark>85 && w=='Y') money+=1000; if(clmark>80 && g=='Y') money+=850; s+=money; if(money>max){ max=money; maxi=i; } } fprintf(fpo,"%s\n%ld\n%ld\n",name[maxi],max,s); fclose(fpi); fclose(fpo); return(0); } [小结、注意] 本题为简单题,只要思路明确清晰,就可 AC。时间复杂度 O(n)。但有一个细节,ZD 变量必须定义 Longint 或以上类型否则会 Error201 的。 2004

津津的储蓄计划 (save.pas/c) 【问题描述: 】 津津的零花钱一直是自己管理。 每个月的月初妈妈给津津 300 元钱, 津津会预算这个月 的花销,并且总能做到实际花销和预算的相同。 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末 她会加上 20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的 零花钱后, 如果她预计到这个月的月末手中还会有多于 100 元或恰好 100 元, 她就会把整百 的钱存在妈妈那里,剩余的钱留在自己手中。 例如 11 月初津津手中还有 83 元,妈妈给了津津 300 元。津津预计 11 月的花销是 180 元,那么她就会在妈妈那里存 200 元,自己留下 183 元。到了 11 月月末,津津手中会剩下 3 元钱。 津津发现这个储蓄计划的主要风险是, 存在妈妈那里的钱在年末之前不能取出。 有可能 在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现 这种情况,津津将不得不在这个月省吃俭用,压缩预算。 现在请你根据 2004 年 1 月到 12 月每个月津津的预算, 判断会不会出现这种情况。 如果 不会,计算到 2004 年年末,妈妈的士津津平常存的钱加上 20%还给津津之后,津津手中会 有多少钱。 【输入文件】 输入文件 save.in 包括 12 行数据,每行包含一个小于 350 的非负整数,分别表示 1 月到 12 月津津的预算。 【输出文件】 输出文件 save.out 包括一行,这一行只不过包含一个整数。如果储蓄计划实施过程中出 现某个月钱不够用的情况,输出-X,X 表示出现这种的第一个月;否则输出到 2004 年年末 津津手中会有多少钱。 【样例输入 1】 290 230 280 200 300 170 340 50 90 80 200 60 【样例输出 1】 -7 【样例输出 2】 290 230 280 200 300 170 330 50 90 80 200 60 【样例输出 2】

1580 <算法分析> 这是本次分区联赛当中最简单的题,算法也很简单:模拟法。 每个月把津津手上的钱加上妈妈给的300元,再减去预算,得到当前手中的钱,假如这 个钱的值是负数(出现亏损),那么就输出负的月数,接着算出存入的钱,并且将手中的钱 减去。如此往复,直到最后按要求输出结果或者中间已经停止。 <数据结构> 边读边处理。 只需要记录当钱手中的钱和已存入的钱即可。 时间、 空间复杂度均为常数。 <代码清单> #include <fstream> using namespace std; ifstream fin("save.in"); ofstream fout("save.out"); void init() { int p, save = 0, cnt = 0; for (int i = 1; i <= 12; i ++) { fin >> p; cnt = cnt + 300 - p; while (cnt >= 100) { save += 100; cnt -= 100; } if (cnt < 0) { fout << - i << endl; return; } } fout << cnt + int(save * 1.2) << endl; } int main() { init(); return 0; } <小结> 这是本次NOIP最简单、最基本的问题。选手只要读清题目,然后动手做就可以了。解 决此类问题没有什么技巧,最重要的是不在关键时刻出现低级错误。


推荐相关:

NOIP历年复赛提高组试题(2004-2013)

2004~2013 年 NOIP 复赛试题集(提高组) 第十届全国信息学奥林匹克分区联赛(NOIP2004)复赛试题(提高组 竞赛用时:3 小时) 1、津津的储蓄计划(Save.pas/dpr/c...


NOIP2015提高组解题报告

NOIP2015提高组解题报告_学科竞赛_高中教育_教育专区。NOIP2015提高组的解题报告,有详细的算法和代码 NOIP2015 提高组解题报告 T1 神奇的幻方【题目大意】 告诉你...


NOIP2004 提高组试题

NOIP2004 提高组试题_其它考试_资格考试/认证_教育专区。历届NOIP试题第十届全国青少年信息学奥林匹克联赛复赛试题 (提高组 3 小时完成) 小时完成) 一、津津的储蓄...


2008noip提高组复赛题解

2008noip提高组复赛题解_学科竞赛_高中教育_教育专区。NOIP2008 提高组解题报告...第一步需要解决的问题是,判断是否有解. 考虑对于任意两个数 q1[i]和 q1[j...


NOIP2015提高组题解zkp蒟蒻的题解

NOIP2015 提高组题解——By zkp 蒟蒻 第一天: 第一题 幻方 纯模拟 第二题 信息传递 对于每一个未访问过的节点,访问其父节点,直到当前结点 曾被访问过,之后...


2004年NOIP联赛提高组初赛试题及答案

2004NOIP联赛提高组初赛试题及答案2004NOIP联赛提高组初赛试题及答案隐藏>> 本资料来自于资源最齐全的21世纪教育网 www.21cnjy.com 第十届全国青少年信息学奥林...


历届noip提高组复赛试题

历届noip提高组复赛试题_学科竞赛_高中教育_教育专区...(提第一题 拦截导弹(28 分) 某国为了防御敌国的...2004 年 第十届全国青少年信息学奥林匹克联赛复赛...


NOIP2015提高组Pascal试题及参考答案

NOIP2015提高组Pascal试题及参考答案_其它考试_资格考试/认证_教育专区。第二十...第二十一届全国青少年信息学奥林匹克联赛初赛 提高组 Pascal 语言试题竞赛时间:...


NOIP2015提高组复赛试题Day1

全国信息学奥林匹克联赛(NOIP2015)复赛 提高组 day1 CCF 全国信息学奥林匹克联赛(NOIP2015)复赛 提高组day1 (请选手务必仔细阅读本页内容)一.题目概况 中文题目...


Noip2009 提高组 第一题 潜伏者

Noip2009 提高组 第一题 潜伏者 (spy.pas/c/cpp) 【问题描述】 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。 历经艰险后,潜伏于 ...

网站首页 | 网站地图
All rights reserved Powered by 学霸学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com