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. CountDownLatch,CyclicBarrier,Semaphore

    CountDownLatch是倒数,doneSignal = new CountDownLatch(LATCH_SIZE);赋初值后,在主线程中等待doneSignal.await();其它线程中,每 ...

  2. 【FFmpeg】ffplay播放rtsp视频流花屏问题

    问题描述:ffplay播放rtsp视频流时,播放过程中随机出现花屏现象. 基本流程学习:阅读ffplay源码,熟悉其播放rtsp视频流的基本流程. 在ffplay源码阅读和分析的基础上,画出了其播放r ...

  3. ASP.NET Web API获取Model元数据

    using System; using System.Web.Http; using Common; namespace ConsoleApp { internal class Program { p ...

  4. linux多线程-互斥&条件变量与同步

    多线程代码问题描述 我们都知道,进程是操作系统对运行程序资源分配的基本单位,而线程是程序逻辑,调用的基本单位.在多线程的程序中,多个线程共享临界区资源,那么就会有问题: 比如 #include < ...

  5. Android详细的对话框AlertDialog.Builder使用方法

      我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继 ...

  6. 【JavaEE】SSH+Spring Security基础上配置AOP+log4j

    Spring Oauth2大多数情况下还是用不到的,主要使用的还是Spring+SpringMVC+Hibernate,有时候加上SpringSecurity,因此,本文及以后的文章的example中 ...

  7. 用javascript实现全选/反选组件

    以下是本人制作的全选/反选 组件,供广大同行参考.指正: 效果如图: 在实现的过程中,全选和全部取消选中这两个功能较为简单,只需用for循环遍历所有复选框为true或false即可.反选也较为简单,也 ...

  8. 选择Web API还是WCF

    ASP.NET WCF是.NET平台服务开发的一站式框架,那么为什么还要有ASP.NET Web API呢?简单来说,ASP.NET Web API的设计和构建只考虑了一件事情,那就是HTTP,而WC ...

  9. 安装SQL Server Management Studio Express错误码是29506

    解决方法:1:新建一个记事本,输入msiexec /i path\SQLServer2005_SSMSEE.msi 然后另存为.cmd格式.2:右单击刚刚创建的那个.CMD文件,选择“以管理员身份运行 ...

  10. 高性能JS笔记2——数据存取

    数据存取性能而言: 字面量>本地变量>数组元素>对象成员 一.标识符解析的性能 标识符解析是有代价的,一个标识符的位置越深,它的读写速度也就越慢. 局部变量的读写速度是最快的,全局变 ...