T06 笨小猴

描述

笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!

这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。

输入

只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。

输出

共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。

  1. 样例输入
  2. 样例 #:
  3. error
  4.  
  5. 样例 #:
  6. olympic
  7. 样例输出
  8. 样例 #:
  9. Lucky Word
  10.  
  11. 样例 #:
  12. No Answer

样例

本题原来提示中的第二行有错误。

统计所有的字符出现的次数,sort排序,第一个非0的元素是最小值,第26个是最大值,然后判断是否为质数,注意0和1要特判

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. using namespace std;
  5. int a[];
  6. char b[];
  7. int main()
  8. {
  9. cin>>b;
  10. for(int i=;i<strlen(b);i++)
  11. a[b[i]-]++;
  12. sort(a+,a+);
  13. int k;
  14. for(int i=;i<=;i++)
  15. if(a[i]!=)
  16. {
  17. k=a[i];
  18. break;
  19. }
  20. int c=a[]-k;
  21. if(c==||c==)
  22. {
  23. cout<<"No Answer"<<endl<<;
  24. return ;
  25. }
  26. for(int i=;i*i<=c;i++)
  27. if(c%i==)
  28. {
  29. cout<<"No Answer"<<endl<<;
  30. return ;
  31. }
  32. cout<<"Lucky Word"<<endl<<c;
  33. }

07:不与最大数相同的数字之和

描述

输出一个整数数列中不与最大数相同的数字之和。

输入

输入分为两行:
第一行为N(N为接下来数的个数,N <= 100);
第二行为N个整数,数与数之间以一个空格分开,每个整数的范围是-1000,000到1000,000。

输出

输出为N个数中除去最大数其余数字之和。

  1. 样例输入
  2.  
  3. 样例输出

样例

在读入时记录最大值,还要记录有几个,最后用n个数的和减去

  1. #include<iostream>
  2. using namespace std;
  3. int sum,maxx,m;
  4. int main()
  5. {
  6. int n,x;
  7. cin>>n;
  8. for(int i=;i<=n;i++)
  9. {
  10. cin>>x;
  11. sum+=x;
  12. if(x>maxx) maxx=x,m=;
  13. else if(x==maxx) m++;//前面有else,不用担心最大值在if加了一次,在这儿又加了一次
  14. }
  15. cout<<sum-m*maxx;
  16. }

T08 白细胞计数

描述

医院采样了某临床病例治疗期间的白细胞数量样本n份,用于分析某种新抗生素对该病例的治疗效果。为了降低分析误差,要先从这n份样本中去除一个数值最大的 样本和一个数值最小的样本,然后将剩余n-2个有效样本的平均值作为分析指标。同时,为了观察该抗生素的疗效是否稳定,还要给出该平均值的误差,即所有有 效样本(即不包括已扣除的两个样本)与该平均值之差的绝对值的最大值。 
现在请你编写程序,根据提供的n个样本值,计算出该病例的平均白细胞数量和对应的误差。


输入

输入的第一行是一个正整数n(2 < n <= 300),表明共有n个样本。
以下共有n行,每行为一个浮点数,为对应的白细胞数量,其单位为10^9/L。数与数之间以一个空格分开。

输出

输出为两个浮点数,中间以一个空格分开。分别为平均白细胞数量和对应的误差,单位也是10^9/L。计算结果需保留到小数点后2位。

  1. 样例输入
  2.  
  3. 12.0
  4. 13.0
  5. 11.0
  6. 9.0
  7. 10.0
  8. 样例输出
  9. 11.00 1.00

样例

注意计算最大误差时,不要直接如果是最大值或最小值就排除,有可能出现两个相同的最值,应该保留一个

  1. #include<iostream>
  2. #include<cmath>
  3. #include<algorithm>
  4. #include<cstdio>
  5. using namespace std;
  6. bool ok1,ok2;
  7. double a[];
  8. double minn=0x7fffffff,maxx,sum;
  9. double ans;
  10. int main()
  11. {
  12. int n;
  13. double x;
  14. cin>>n;
  15. for(int i=;i<=n;i++)
  16. {
  17. cin>>x;
  18. a[i]=x;
  19. sum+=x;
  20. if(x>maxx) maxx=x;
  21. if(x<minn) minn=x;
  22. }
  23. double m=(sum-maxx-minn)/(n-);
  24. printf("%.2lf",m);
  25. printf(" ");
  26. for(int i=;i<=n;i++)
  27. {
  28. if(a[i]==minn&&!ok1) //只continue掉一个极值
  29. {
  30. ok1=true;continue;
  31. }
  32. if(a[i]==maxx&&!ok2)
  33. {
  34. ok2=true;continue;
  35. }
  36. ans=max(ans,abs(a[i]-m));
  37. }
  38. printf("%.2lf",ans);
  39. }

开始得了8分,错误代码:

  1. for(int i=1;i<=n;i++)
  2. {
  3. if(a[i]==minn) continue;
  4. if(a[i]==maxx) continue;
    忽略了极值有>=2个的情况。例3,3,4,4,只continue一个3.一个4
    T09 直方图
    描述

给定一个非负整数数组,统计里面每一个数的出现次数。我们只统计到数组里最大的数。

假设 Fmax (Fmax < 10000)是数组里最大的数,那么我们只统计 {0,1,2.....Fmax} 里每个数出现的次数。

  1. 输入
    第一行n是数组的大小。1 <= n <= 10000
    紧接着一行是数组的n个元素。
    输出
    按顺序输出每个数的出现次数,一行一个数。如果没有出现过,则输出0
    对于例子中的数组,最大的数是3,因此我们只统计{0,1,2,3}的出现频数。
  1. 样例输入
  2.  
  3. 样例输出

样例

  1.  
  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. int n,sum[],x,maxx;
  5. int main()
  6. {
  7. cin>>n;
  8. for(int i=;i<=n;i++)
  9. {
  10. scanf("%d",&x);
  11. sum[x]++;
  12. if(x>maxx) maxx=x;
  13. }
  14. for(int i=;i<=maxx;i++)
  15. printf("%d\n",sum[i]);
  16. }
  1. T10 找最大数序列
    描述

输入n行,每行不超过100个无符号整数,无符号数不超过4位。请输出最大整数以及最大整数所在的行号(行号从1开始)。如果该数据在多个行中出现,则按从小到大输出相应行号,行号之间以一个逗号分开。

  1. 输入
    一行输入一个正整数nn <= 30)。
    之后的n行,每行包含不超过100个无符号整数,整数之间以一个逗号分开。
    输出
    第一行:最大整数;
    第二行:最大整数所在的行编号,逗号间隔。
  1. 样例输入
  2.  
  3. ,,,,,,
  4. ,,,,
  5. ,,,
  6. ,,,,,
  7. ,,,,
  8. ,,,,,,
  9. 样例输出
  10.  
  11. ,,

样例

本题的读入方式有好几种。

1、按字符串把一行读进去,再根据逗号断开。

2、一个字符一个字符的读。

以下是第二种方法,读入方法思路来源于读入优化。

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. using namespace std;
  5. int n,h,x,sl=,l=;
  6. int ans[],sum,maxn=-;
  7. char c;
  8. int a[][];
  9. void init()//修改的读入优化
  10. {
  11. c=getchar();
  12. while(h<=n)
  13. {
  14. if(c=='\n')
  15. {
  16. if(h)
  17. {
  18. a[h][l]=x;
  19. a[h][l+]=;
  20. x=;
  21. }
  22. h++;
  23. l=;
  24. if(h<=n)
  25. c=getchar();
  26. continue;
  27. }
  28. if(c==',')
  29. {
  30. a[h][l]=x;
  31. l++;
  32. x=;
  33. c=getchar();
  34. continue;
  35. }
  36. while(c>=''&&c<='')
  37. {
  38. x=x*+c-'';
  39. c=getchar();
  40. }
  41. }
  42. }
  43. int main()
  44. {
  45. cin>>n;
  46. init();
  47. for(int i=;i<=n;i++)
  48. {
  49. int j=;
  50. while(a[i][j]!=)
  51. {
  52. if(a[i][j]==maxn&&ans[sum]!=i)//一行里可能有好几个最大数,但只能输出一个,所以ans【sum】!=i
  53. ans[++sum]=i;
  54. else if(a[i][j]>maxn)
  55. {
  56. sum=;
  57. ans[++sum]=i;
  58. maxn=a[i][j];
  59. }
  60. j++;
  61. }
  62. }
  63. cout<<maxn<<endl;
  64. for(int i=;i<sum;i++) cout<<ans[i]<<',';
  65. cout<<ans[sum];
  66. }

第二种方法的另一种代码参照链接,来源:myj

T11 连续出现的字符

描述

给定一个字符串,在字符串中找到第一个连续出现至少k次的字符。

输入

第一行包含一个正整数k,表示至少需要连续出现的次数。1 <= k <= 1000。
第二行包含需要查找的字符串。字符串长度在1到1000之间,且不包含任何空白符。

输出

若存在连续出现至少k次的字符,输出该字符;否则输出No。

  1. 样例输入
  2.  
  3. abcccaaab
  4. 样例输出
  5. c

样例

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. char a[];
  5. int n,now=;
  6. using namespace std;
  7. int main()
  8. {
  9. cin>>n;
  10. cin>>a;
  11. if(n==)
  12. {
  13. cout<<a[];
  14. return ;
  15. }
  16. for(int i=;i<strlen(a);i++)
  17. {
  18. if(a[i]==a[i-]) now++;
  19. else now=;
  20. if(now==n)
  21. {
  22. cout<<a[i];
  23. return ;
  24. }
  25. }
  26. cout<<"No";
  27. }

T12 最长平台

描述

已知一个已经从小到大排序的数组,这个数组的一个平台(Plateau)就是连续的一串值相同的元素,并且这一串元素不能再延伸。例如,在 1,2,2,3,3,3,4,5,5,6中1,2-2,3-3-3,4,5-5,6都是平台。试编写一个程序,接收一个数组,把这个数组最长的平台找出 来。在上面的例子中3-3-3就是最长的平台。

输入

第一行有一个整数n(n <= 1000),为数组元素的个数。第二行有n个整数,整数之间以一个空格分开。

输出

输出最长平台的长度。

  1. 样例输入
  2.  
  3. 样例输出

样例

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. int n,now=,maxn=,x,last;
  5. using namespace std;
  6. int main()
  7. {
  8. cin>>n;
  9. cin>>last;
  10. for(int i=;i<=n;i++)
  11. {
  12. scanf("%d",&x);
  13. if(x==last) now++;
  14. else now=;
  15. if(now>maxn) maxn=now;
  16. last=x;
  17. }
  18. cout<<maxn;
  19. }

T13 整数去重

描述

给定含有n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。

输入

输入包含两行:
第一行包含一个正整数n(1 <= n <= 20000),表示第二行序列中数字的个数;
第二行包含n个整数,整数之间以一个空格分开。每个整数大于等于10、小于等于100。

输出

输出只有一行,按照输入的顺序输出其中不重复的数字,整数之间用一个空格分开。

  1. 样例输入
  2.  
  3. 样例输出

样例

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. int n,now=,maxn=;
  5. int a[];
  6. bool v[];
  7. using namespace std;
  8. int main()
  9. {
  10. cin>>n;
  11. for(int i=;i<=n;i++)
  12. {
  13. scanf("%d",&a[i]);
  14. if(!v[a[i]])
  15. {
  16. v[a[i]]=true;
  17. cout<<a[i]<<' ' ;
  18. }
  19. }
  20. }

T 14铺地毯

描述

为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有n张地毯,编号从1到n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。

输入输出样例1说明:如下图,1号地毯用实线表示,2号地毯用虚线表示,3号用双实线表示,覆盖点(2,2)的最上面一张地毯是3号地毯。

输入输出样例2说明:如下图,1号地毯用实线表示,2号地毯用虚线表示,3号用双实线表示,覆盖点(4,5)的最上面一张地毯是3号地毯。

输入

输入共n+2行。
第一行,一个整数n,表示总共有n张地毯。
接下来的n行中,第i+1行表示编号i的地毯的信息,包含四个正整数a,b,g,k,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标(a,b)以及地毯在x轴和y轴方向的长度。
第n+2行包含两个正整数x和y,表示所求的地面的点的坐标(x,y)。

对于30%的数据,有n≤2;
对于50%的数据,0≤a, b, g, k≤100;
对于100%的数据,有0≤n≤10,000,0≤a, b, g, k≤100,000。

输出

输出共1行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖则输出-1。

  1. 样例输入
  2. 样例 #:
  3.  
  4. 样例 #:
  5.  
  6. 样例输出
  7. 样例 #:
  8.  
  9. 样例 #:
  10. -

样例

倒着往前找

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. int n,x,y;
  5. int a[],b[],g[],k[];
  6. int main()
  7. {
  8. scanf("%d",&n);
  9. for(int i=;i<=n;i++)
  10. scanf("%d%d%d%d",&a[i],&b[i],&g[i],&k[i]);
  11. scanf("%d%d",&x,&y);
  12. for(int i=n;i>=;i--)
  13. {
  14. if(x>=a[i]&&x<=a[i]+g[i]&&y>=b[i]&&y<=b[i]+k[i])
  15. {
  16. cout<<i;
  17. return ;
  18. }
  19. }
  20. cout<<-;
  21. }

T15 接水问题 

描述

学校里有一个水房,水房里一共装有 m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为 1。

现在有 n 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从 1 到 n 编号,i号同学的接水量为 wi。接水开始时,1 到 m 号同学各占一个水龙头,并同时打开水龙头接水。当其中某名同学 j 完成其接水量要求 wj后,下一名排队等候接水的同学 k 马上接替 j 同学的位置开始接水。这个换人的过程是瞬间完成的,且没有任何水的浪费。即 j 同学第 x 秒结束时完成接水,则 k 同学第 x+1 秒立刻开始接水。 若当前接水人数 n’不足 m,则只有 n’个龙头供水,其它 m-n’个龙头关闭。

现在给出 n 名同学的接水量,按照上述接水规则,问所有同学都接完水需要多少秒。

输入

第 1 行2 个整数 n 和 m,用一个空格隔开,分别表示接水人数和龙头个数。
第 2 行 n 个整数 w1、w2、……、wn,每两个整数之间用一个空格隔开,wi表示 i 号同学的接水量。

1 ≤ n ≤ 10000,1 ≤ m ≤ 100 且 m ≤ n;
1 ≤ wi ≤ 100。

输出

输出只有一行,1 个整数,表示接水所需的总时间。

  1. 样例输入
  2. 样例 #:
  3.  
  4. 样例 #:
  5.  
  6. 样例输出
  7. 样例 #:
  8.  
  9. 样例 #:

样例

利用优先队列,将其转化为小根堆,前m个先存进去,每次取出队首元素加上下一个再存进去,最后一只清空队列,最后一个数即为答案

  1. #include<iostream>
  2. #include<queue>
  3. #include<cstdio>
  4. using namespace std;
  5. priority_queue<int,vector<int>,greater<int> >p;//转化为小根堆
  6. int n,m,x,ans;
  7. int main()
  8. {
  9. scanf("%d%d",&n,&m);
  10. for(int i=;i<=m;i++)
  11. {
  12. scanf("%d",&x);
  13. p.push(x);
  14. }
  15. for(int i=m+;i<=n;i++)
  16. {
  17. scanf("%d",&x);
  18. int t=p.top();
  19. p.pop();
  20. t+=x;
  21. p.push(t);
  22. }
  23. while(!p.empty())
  24. {
  25. ans=p.top();
  26. p.pop();
  27. }
  28. printf("%d",ans);
  29. }

noi题库(noi.openjudge.cn) 1.9编程基础之顺序查找T06——T15的更多相关文章

  1. noi题库(noi.openjudge.cn) 1.9编程基础之顺序查找T01——T05

    T01 查找特定元素的值 描述 在一个序列(下标从1开始)中查找一个给定的值,输出第一次出现的位置. 输入 第一行包含一个正整数n,表示序列中元素个数.1 <= n <= 10000.第二 ...

  2. NOI题库刷题日志 (贪心篇题解)

    这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制:  1000ms  内存限制:  65536kB 描述 在一个平面上,如果有两个点( ...

  3. NOI题库 1768最大子矩阵 题解

    NOI题库 1768最大子矩阵  题解     总时间限制: 1000ms 内存限制: 65536kB   描述   已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大 ...

  4. NOI题库 09:图像旋转翻转变换

    NOI题库开始的题,也是略水,当然也是大水,所以彼此彼此 09:图像旋转翻转变换 总时间限制: 1000ms 内存限制: 65536kB 描述 给定m行n列的图像各像素点灰度值,对其依次进行一系列操作 ...

  5. NOI题库-小学奥赛QwQ

    今天Loli教育我们让我们来看看NOI题库的奥赛部分,不过,为何是小学的( ⊙ o ⊙ )啊!感觉智商被各种侮辱. 余数相同问题: 描述 已知三个正整数 a,b,c. 现有一个大于1的整数x,将其作为 ...

  6. noi题库(noi.openjudge.cn) 1.7编程基础之字符串T31——T35

    T31 字符串P型编码 描述 给定一个完全由数字字符('0','1','2',-,'9')构成的字符串str,请写出str的p型编码串.例如:字符串122344111可被描述为"1个1.2个 ...

  7. noi题库(noi.openjudge.cn) 1.5编程基础之循环控制T36——T45

    T36 计算多项式的值 描述 假定多项式的形式为xn+xn-1+-+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值. 输入 输入仅一行,包括x和n,用单个空格隔开.x在flo ...

  8. noi题库(noi.openjudge.cn) 1.7编程基础之字符串T21——T30

    T21:单词替换 描述 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写.现需要将其中的某个单词替换成另一个单词,并输出替 ...

  9. noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T11——T20

    T11 图像旋转 描述 输入一个n行m列的黑白图像,将它顺时针旋转90度后输出. 输入 第一行包含两个整数n和m,表示图像包含像素点的行数和列数.1 <= n <= 100,1 <= ...

随机推荐

  1. 安全攻防之SQL注入(通过sqlmap搞定所有问题)

    第一步: sqlmap基于Python,所以首先下载: http://yunpan.cn/QiCBLZtGGTa7U  访问密码 c26e 第二步: 安装Python,将sqlmap解压到Python ...

  2. 最新中国菜刀caidao-20160620下载和说明

    0x00 中国制造, 黑客之刀 中国菜刀是中国安全圈内使用非常广泛的一款Webshell管理工具,此次老兵大牛进行了更新,界面更加优美,功能更加丰富,有图有真相! 0x01 验证 此次更新还自带了官网 ...

  3. List 简单升\降序实现

    public class User { public int Id { get; set; } public string Code { get; set; } } //示例 //升序 list.So ...

  4. ORACLE查看数据文件包含哪些对象

    在上篇ORACLE查看表空间对象中,我介绍了如何查询一个表空间有那些数据库对象,那么我们是否可以查看某个数据文件包含那些数据库对象呢?如下所示 SELECT  E.SEGMENT_TYPE       ...

  5. 简析一下SQL Server里面Fast_Forword 和 SRROLL 的区别

    这次简单说说游标的分类. 先看看通常游标的语法 DECLARE cursor_name CURSOR [ LOCAL :局部游标,仅在当前会话有效 | GLOBAL : 全局游标,全局有效,可以 ] ...

  6. text-transform设置单词首字母大写

    text-transform 一.语法   text-transform 主要用于设置文本的大小写. text-transform有5个值,分别如下: none. 默认值. capitalize. 文 ...

  7. CentOS 6.3下配置iSCSI网络存储

    一.简介 iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够 ...

  8. openwrt修改flash大小

    前言 默认openwrt trunk编译出来的flash大小为8M,但是我们手上的板子可能flash大小更大,本文以MT7620a为例,将其flash大小由8M修改为16M或者32M 增加dts文件 ...

  9. 利用增量备份恢复因归档丢失造成的DG gap

    故障现象:data guard归档出现gap,悲剧的是丢失的归档在主库上被rman备份时删除了,丢失的归档大约有20几个,数据库大小约2T,如果重建DG将非常耗时间,因此决定利用增量备份的方式恢复DG ...

  10. CentOS下mysql默认安装位置

    如果采用RPM包安装,安装路径应在/usr/share/mysql目录下 mysqldump文件位置:/usr/bin/mysqldump mysqli配置文件: /etc/my.cnf或/usr/s ...