T1 ISBN号码

题目描述

每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符, 其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标 准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第 二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。

识别码的计算方法如下:

首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对 067082162这9个数字,从左至右,分别乘以1,2,...,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。

你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。

输入输出格式

输入格式:

输入文件isbn.in只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。

输出格式:

输出文件isbn.out共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。

输入输出样例

输入样例#1:

  1. 【输入样例1
  2. 0-670-82162-4
  3. 【输入样例2
  4. 0-670-82162-0
输出样例#1:

  1. 【输出样例1
  2. Right
  3. 【输出样例2
  4. 0-670-82162-4

说明

2008普及组第一题

  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. int main(){
  5. char a[];
  6. int i=,c=;
  7. cin>>a;
  8. c=(a[]-'')*+(a[]-'')*+(a[]-'')*+(a[]-'')*+(a[]-'')*+(a[]-'')*+(a[]-'')*+(a[]-'')*+(a[]-'')*;
  9. c%=;
  10. if(c==)
  11. if(a[]=='X') cout<<"Right";
  12. else {
  13. for(i=;i<=;i++) cout<<a[i];
  14. cout<<"X";
  15. }
  16. else if(a[]-''==c) cout<<"Right";
  17. else{
  18. for(i=;i<=;i++) cout<<a[i];
  19. cout<<c;
  20. }
  21. return ;
  22. }

用char串存号码,c[i]-'0'得到数字

完全的模拟

T2 排座椅

题目描述

上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小 雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位 置是(i,j),为了方便同学们进出,在教室中设置了K条横向的通道,L条纵向的通道。于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳 的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了两个会交头接耳的同学,那么他们就不会交头接耳了。

请你帮忙给小雪编写一个程序,给出最好的通道划分方案。在该方案下,上课时交头接耳的学生的对数最少。

输入输出格式

输入格式:

输入文件seat.in的第一行,有5个用空格隔开的整数,分别是M,N,K,L,D(2<=N,M<=1000,0<=K<M,0<=L<N,D<=2000)。

接下来的D行,每行有4个用空格隔开的整数。第i行的4个整数Xi,Yi,Pi,Qi,表示坐在位置(Xi,Yi)与(Pi,Qi)的两个同学会交头接耳(输入保证他们前后相邻或者左右相邻)。

输入数据保证最优方案的唯一性。

输出格式:

输出文件seat.out共两行。

第一行包含K个整数,a1,a2……aK,表示第a1行和a1+1行之间、第a2行和a2+1行之间、…、第aK行和第aK+1行之间要开辟通道,其中ai< ai+1,每两个整数之间用空格隔开(行尾没有空格)。

第二行包含L个整数,b1,b2……bL,表示第b1列和b1+1列之间、第b2列和b2+1列之间、…、第bL列和第bL+1列之间要开辟通道,其中bi< bi+1,每两个整数之间用空格隔开(列尾没有空格)。

输入输出样例

输入样例#1:

  1. 4 5 1 2 3
  2. 4 2 4 3
  3. 2 3 3 3
  4. 2 5 2 4
输出样例#1:

  1. 2
  2. 2 4

说明

上图中用符号*、※、+标出了3对会交头接耳的学生的位置,图中3条粗线的位置表示通道,图示的通道划分方案是唯一的最佳方案。

2008年普及组第二题

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstring>
  5. #include<algorithm>
  6. using namespace std;
  7. struct td{
  8. int id;
  9. int num;
  10. };
  11. struct td x[],y[];
  12. int cmp(td a,td b){
  13. return a.num>b.num;
  14. }
  15. int rex[],rey[];
  16. int m,n,K,L,d;
  17. int main(){
  18. scanf("%d%d%d%d%d",&m,&n,&K,&L,&d);
  19. int i,j;
  20. int x1,y1,x2,y2;
  21. while(d--){
  22. scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
  23. if(y1!=y2){
  24. int mi=min(y1,y2);
  25. y[mi].num++;
  26. y[mi].id=mi;
  27. }
  28. if(x1!=x2){
  29. int mi=min(x1,x2);
  30. x[mi].num++;
  31. x[mi].id=mi;
  32. }
  33. }
  34. sort(x+,x+m+,cmp);
  35. sort(y+,y+n+,cmp);
  36. for(i=;i<=K && i<=m;i++){
  37. rex[i]=x[i].id;
  38. }
  39. for(i=;i<=L && i<=n;i++){
  40. rey[i]=y[i].id;
  41. }
  42. sort(rex+,rex+K+);
  43. sort(rey+,rey+L+);
  44. for(i=;i<=K;i++)printf("%d ",rex[i]);
  45. cout<<endl;
  46. for(i=;i<=L;i++)printf("%d ",rey[i]);
  47. return ;
  48. }

两次排序,一次排能隔开的数量,一次排ID

看发帖时间就知道我为何不想多解释

T3

题目描述

上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。

游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师在此吹哨子时,传球停止,此时,拿着球没有传出去的那个同学就是败者,要给大家表演一个节目。

聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里。两种传球方法被视作不同的方 法,当且仅当这两种方法中,接到球的同学按接球顺序组成的序列是不同的。比如有三个同学1号、2号、3号,并假设小蛮为1号,球传了3次回到小蛮手里的方 式有1->2->3->1和1->3->2->1,共2种。

输入输出格式

输入格式:

输入文件ball.in共一行,有两个用空格隔开的整数n,m(3<=n<=30,1<=m<=30)。

输出格式:

输出文件ball.out共一行,有一个整数,表示符合题意的方法数。

输入输出样例

输入样例#1:

  1. 3 3
输出样例#1:

  1. 2

说明

40%的数据满足:3<=n<=30,1<=m<=20

100%的数据满足:3<=n<=30,1<=m<=30

2008普及组第三题

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<algorithm>
  5. using namespace std;
  6. int n;
  7. int f[][];//[第i次][第j个人]
  8. int t;
  9. int main(){
  10. cin>>n>>t;
  11. int i,j;
  12. f[][]=;//球刚开始在1号手里
  13. for(i=;i<=t;i++)
  14. for(j=;j<=n;j++){
  15. f[i][j%n]=f[i-][(j-)%n]+f[i-][(j+)%n];
  16. // for(int k=0;k<=n;k++)printf("%d ",f[i][k]);
  17. }
  18. printf("%d",f[t][]);
  19. return ;
  20. }

动规,f[次数][人员]

每次可以从左边的人或右边的人手里接到球,所以方案数是左右相加

注意链变环

T4 立体图

题目描述

小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容。最近,他准备给小朋友们讲解立体图,请你帮他画出立体图。

小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每个格子上堆了一些同样大小的积木(积木的长宽高都是1),小渊想请你打印出这些格子的立体图。我们定义每个积木为如下格式,并且不会做任何翻转旋转,只会严格以这一种形式摆放:

每个顶点用1个加号’+’表示,长用3个”-”表示,宽用1个”/”,高用两个”|”表示。字符’+’,”-”,”/”,”|”的ASCII码分别 为43,45,47,124。字符’.’(ASCII码46)需要作为背景输出,即立体图里的空白部分需要用’.’来代替。立体图的画法如下面的规则:

若两块积木左右相邻,图示为:

若两块积木上下相邻,图示为:

若两块积木前后相邻,图示为:

立体图中,定义位于第(m,1)的格子(即第m行第1列的格子)上面自底向上的第一块积木(即最下面的一块积木)的左下角顶点为整张图最左下角的点。

输入输出格式

输入格式:

输入文件drawing.in第一行有用空格隔开的2个整数m和n,表示有m*n个格子(1<=m,n<=50)。

接下来的m行,是一个m*n的矩阵,每行有n个用空格隔开的整数,其中第i行第j列上的整数表示第i行第j列的个子上摞有多少个积木(1<=每个格子上的积木数<=100)。

输出格式:

输出文件drawing.out中包含题目要求的立体图,是一个K行L列的字符串矩阵,其中K和L表示最少需要K行L列才能按规定输出立体图。

输入输出样例

输入样例#1:

  1. 3 4
  2. 2 2 1 2
  3. 2 2 1 1
  4. 3 2 1 2
输出样例#1:

  1. ......+---+---+...+---+
  2. ..+---+ / /|../ /|
  3. ./ /|-+---+ |.+---+ |
  4. +---+ |/ /| +-| | +
  5. | | +---+ |/+---+ |/|
  6. | |/ /| +/ /|-+ |
  7. +---+---+ |/+---+ |/| +
  8. | | | +-| | + |/.
  9. | | |/ | |-| +..
  10. +---+---+---+---+ |/...
  11. | | | | | +....
  12. | | | | |/.....
  13. +---+---+---+---+......

说明

NOIP2008普及组第四题

本质上还是模拟,但是算坐标让题目复杂度上了一级

不习惯夜战的我算错了好几次……

  1. /*SilverN 2008普及组T4立体图*/
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<algorithm>
  7. using namespace std;
  8. char c[][]={//立体图
  9. "..+---+",
  10. "./ /|",
  11. "+---+ |",
  12. "| | +",
  13. "| |/.",
  14. "+---+.."};
  15. char map[][];
  16. int d[][];
  17. int K,L;
  18. void draw(int x,int y){//按左上角坐标定位
  19. int i,j;
  20. for(i=;i<=;i++)
  21. for(j=;j<=;j++){
  22. if(map[x+i][y+j]!='.' && c[i][j]=='.')continue;//以前画过,就不用点来覆盖了
  23. map[x+i][y+j]=c[i][j];
  24. }
  25. return;
  26. }
  27. int main(){
  28. int i,j;
  29. int m,n;//行数,列数
  30. scanf("%d%d",&m,&n);
  31. for(i=;i<=m;i++)
  32. for(j=;j<=n;j++){
  33. scanf("%d",&d[i][j]);
  34. K=max(K,*(m-i+)+d[i][j]*+);
  35. //2*(m-i+1)是由于矩阵宽而多需要的高度,d[i][j]*3+1是因为积木数量而需要的高度
  36. }
  37. L=*n+*m+;//4*n是由于矩阵宽而多需要的宽度,2*m+1是因为积木前后层数而需要的高度
  38. for(i=;i<=K;i++)
  39. for(j=;j<=L;j++)
  40. map[i][j]='.';//先铺好点
  41. for(i=;i<=m;i++)//从后往前
  42. for(j=;j<=n;j++)//从左往右
  43. for(int g=;g<d[i][j];g++)//从下往上
  44. {
  45. draw(K-*(m-i)-*(g+)+,*j+*(m--i)-);//这坐标算得心累
  46. }
  47. for(i=;i<=K;i++){//输出
  48. for(j=;j<=L;j++)
  49. putchar(map[i][j]);
  50. printf("\n");
  51. }
  52. return ;
  53. }

解释都在注释里了

那个用char组表示立体图的方法是和别的大神学的

很帅对吧

NOIP2008普及组 题解 -SilverN的更多相关文章

  1. NOIP2008普及组题解

    NOIP2008普及组题解 从我在其他站的博客直接搬过来的 posted @ 2016-04-16 01:11 然后我又搬回博客园了233333 posted @ 2016-06-05 19:19 T ...

  2. NOIP2010普及组题解 -SilverN

    三国游戏 题目内容不放了 由于电脑总是会拆掉最大的组合,所以玩家最多只能得到数值第二大的组合 那么找出第二大的组合就行了 #include<iostream> #include<cs ...

  3. noip2008普及组4题题解-rLq

    (啊啊啊终于补到了今天的作业了) 本题地址:http://www.luogu.org/problem/show?pid=1058 题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣 ...

  4. NOIP2008普及组第3题 传球游戏

    NOIP2008普及组第3题 传球游戏 时间限制: 1 Sec  内存限制: 128 MB提交: 29  解决: 16[提交][状态][讨论版][命题人:外部导入] 题目描述 上体育课的时候,小蛮的老 ...

  5. NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)

    题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容.最近,他准备给小朋友们讲解立体图,请你帮他画出立体图. 小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每 ...

  6. noip2008普及组3题题解-rLq

    (第一次写题解,随意喷) (只是前一天的作业哈) (先凑个数) 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈 ...

  7. [题解]noip2016普及组题解和心得

    [前言] 感觉稍微有些滑稽吧,毕竟每次练的题都是提高组难度的,结果最后的主要任务是普及组抱一个一等奖回来.至于我的分数嘛..还是在你看完题解后写在[后记]里面.废话不多说,开始题解. 第一题可以说的内 ...

  8. NOIP2002-2017普及组题解

    虽然普及组一般都是暴力省一,但是有一些题目还是挺难的qwq个人觉得能进TG的题目会在前面打上'*' NOIP2002(clear) #include<bits/stdc++.h> usin ...

  9. noip2016普及组题解和心得

    前言 感觉稍微有些滑稽吧,毕竟每次练的题都是提高组难度的,结果最后的主要任务是普及组抱一个一等奖回来.至于我的分数嘛..还是在你看完题解后写在[后记]里面.废话不多说,开始题解. (其实这篇博客只有题 ...

随机推荐

  1. csharp:Nhibernate Procedure with CreateSQLQuery and GetNamedQuery

    <?xml version="1.0" encoding="utf-8"?> <hibernate-mapping assembly=&quo ...

  2. hadoop pipes wordcount compile

    http://devel.cs.stolaf.edu/projects/bw/wiki.real/index.php/Hadoop_Reference,_January_2011 http://guo ...

  3. The main concepts

    The MVC application model A Play application follows the MVC architectural pattern applied to the we ...

  4. datepicker冲突

    公司里的项目由于发展较快,很多东西都没有好好梳理一下,以至于有很多的潜在的问题. 最近就遇到了一个比较坑的问题.datepicker 有两个插件库中的datepicker插件比较有名.一个是jQuer ...

  5. MSCRM 仪表盘 控件 数量 更改(Change the maximum no. of controls on MSCRM Dashboards )

    The maximum number of controls allowed on MSCRM dashboards are 6. You cannot put the more than 6 gra ...

  6. HTML中图片热区的使用

    在HTML中有一个具有把图片划分成多个作用区域,并链接到不同网页的标记,那就是 <area>地图作用区域标记. <area>标记主要用于图像地图,通过该标记可以在图像地图中设定 ...

  7. Windows 下Apace tomcat

    java JDK安装: 1. 官方www.oracle.com 下载jdk 2. 环境变量配置 (1)新建->变量名:JAVA_HOME变量值:C:\Program Files (x86)\Ja ...

  8. view.performClick()触发点击事件

    1.主要作用 自动触发控件的点击事件 2.界面的布局文件  activity_main.xml <RelativeLayout xmlns:android="http://schema ...

  9. Android 正则表达式

    1.相关知识链接 正则表达式语法   https://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.80).aspx 正则表达式入门教程   http: ...

  10. LayoutTransition实现显示、隐藏动画

    public class Main4Activity extends Activity { private TextView tv1; private Button button1; private ...