程序设计-解题记录_第1页
程序设计-解题记录_第2页
程序设计-解题记录_第3页
程序设计-解题记录_第4页
程序设计-解题记录_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 程序设计导引及在线实践 解题记录 注 本人还是个菜鸟 初入门 acm 本书还差孙子问题和矩形覆盖尚未解 决 而且代码可能也写得不是很好 By l2ice 已解决的问题 91 1017 1088 1183 1191 1321 1657 1661 1664 1833 1835 2677 2680 2692 2694 2706 2712 2713 2714 2715 2723 2733 2734 2735 2737 2738 2739 2742 2743 2744 2745 2746 2747 2749 2750 2753 2754 2756 2757 2760 2764 2765 2766 2767 2773 2774 2775 2785 2786 2787 2790 2792 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2950 2951 2952 2964 2965 2966 2967 2972 2973 2974 2976 2977 2979 2980 2981 简单计算题 3 鸡兔同笼 3 棋盘的距离 4 3 校门外的树 5 填词 6 装箱问题 7 求平均年龄 8 数字求和 8 两倍 9 肿瘤面积 10 肿瘤检测 11 垂直直方图 11 谁拿了最多奖学金 13 化验诊断 14 简单密码 15 密码 15 数制转换问题 17 确定进制 17 Skew 数 18 十进制到八进制 18 八进制到十进制 19 2 进制转化为 16 进制 19 八进制小数 20 字符串处理 22 统计字符数 22 487 3279 23 子串 24 字符串判等 25 All in All 26 W 的密码 27 2 古代密码 28 词典 29 最短前缀 31 浮点数格式 32 日期和时间处理 33 判断闰年 33 细菌繁殖 34 日历问题 34 玛雅历 35 时区转换 36 不吉利日期 38 特殊日历计算 38 模拟题 39 约瑟夫问题 39 摘花生 41 显示器 42 排列 44 宇航员 46 数根 48 武林 48 循环数 51 高精度计算 53 大整数加法 53 大整数乘法 54 大整数除法 55 麦森数 57 2 的 n 次方 59 浮点数加法 60 浮点数求高精度幂 62 枚举 64 生理周期 64 假币问题 64 完美立方 66 熄灯问题 67 恼人的青蛙 68 计算对数 70 数字方格 71 反正切函数的应用 72 画家问题 74 递归 76 拨钟问题 76 菲波那契数列 77 二叉树 78 逆波兰表达式 78 3 放苹果 79 红与黑 80 八皇后 81 木棒 82 城堡问题 83 分解因数 85 迷宫 86 算 24 87 文件结构 图 90 小游戏 91 碎纸机 93 棋盘问题 95 动态规划 96 数字三角形 96 最长上升子序列 97 帮助 Jimmy 98 公共子序列 100 陪审团的人选 101 金银岛 103 滑雪 104 采药 105 Pell 数列 105 集合加法 106 棋盘分割 108 最大矩阵 111 木材加工 112 简单计算题 简单计算题 鸡兔同笼鸡兔同笼 include using namespace std int main int n cin n int a while n cin a if a 2 0 cout 0 0 endl 4 else if a 4 0 cout a 4 a 2 else cout a 4 1 a 2 cout endl return 0 说明 一道很水的题 有点类似A B 棋盘的距离棋盘的距离 include using namespace std int main char start 3 end 3 int n cin n while n cin start end int x abs start 0 end 0 两点x坐标的距离 下同 int y abs start 1 end 1 if x 0 else cout y if x y x 0 y 0 cout 1 王后的步数 else cout 2 if x 0 y 0 cout 1 车的步数 else cout 2 if x y 2 0 象比较特殊 因为他只能走斜的 它每走一步 x y 都增加或减少1 所以若能走x y必为偶数 cout Inf endl else if x y cout 1 endl 如果正好相等 走一步就好了 很 好理解 else cout 2 endl 5 return 0 说明 比上题难一点的简单题 主要是象的走路问题 3 校门外的树校门外的树 include using namespace std void Qsort int a int low int high 自己写的qsort 比不上标准库的 if low high int lown low int highn high int key a low while low high while low high a low a high while low a low low a high a low a low key Qsort a lown low 1 Qsort a low 1 highn int main int L M cin L M int a 100 b 100 for int i 0 i a i b i Qsort a 0 M 1 将左右的界分别 从小到大排列 Qsort b 0 M 1 int l a 0 r b 0 当前处理的左界和右界 int an 0 for int i 1 i a i 6 若右界大于等于ai 则当前处理右界和左界间存在一个子集 得跳掉这个闭 集不处理 待会一起减来得到总集的长度 r b i 更新下一个右界 形成一个大的闭集 else 若ai大于右界 则当前处理的右界和左界里没有子集 两界相减 获得要砍 掉的树的距离 an r l 1 l a i 更新左右界 r b i an r l 1 cout L an 1 endl return 0 说明 这种方法来自网上的 还有种做法来自书上 比较简单 但内存占用大 网上的方法则值得回味 这道题写报告的时候 竟忘了什么思路 好好回想 一下 Ps 我貌似没解释清楚 虽然是网上思路 但还是有点自己写的 填词填词 include using namespace std int main int character 26 0 int N M P cin N M P char c 11 for int i 0 i c for int k 0 c k 0 k character c k A 记录每个字母出现的次数 for int i 0 i c for int k 0 c k 0 k character c k A 因为他保证填词游戏至少有一组答案 此处会输入6个单词 只要去掉这些单词 就可以得到剩下的3个单词 即答案 int k 0 for int i 0 i0 c k i A character i c k 0 cout c endl return 0 说明 这道题呢 貌似挺麻烦的 但其实很简单 根本无需用到递归 搜索 因为他只是个 3 3 的矩阵 且保证有一个结果 装箱问题装箱问题 include using namespace std int main int h 4 0 5 3 1 数组h表示 3的产品数目分别是的倍数 的倍数加 的倍数加 的倍数加 时 为 3的产品打开的新箱子中剩余的 2的空位个数 int a b c d e f int N 0 int x 0 while cin a b c d e f 需要箱子的数目 c 3 4为c 4的下届 这个技巧要记住 int y 5 d h c 4 用来存 2的剩余空位数目 if b y N b y 8 9 还需要多少箱子来存 2箱子 x 36 N f 36 e 25 d 16 c 9 b 4 if a x N a x 35 36 可以用来存取 1的空位数目 8 cout N endl return 0 说明 不得不说这是一道值得回味的数学题 当时研究答案研究了很久 主要 是得考虑一下 3 3 箱子的问题 求平均年龄求平均年龄 include include using namespace std int main int n cin n float a sum 0 00 for int i 0 i a sum a cout fixed setprecision 2 sum n endl return 0 说明 简单题 数字求和数字求和 include using namespace std int main int a int b cin a int sum 0 for int i 0 i b if b a sum b cout sum endl 9 return 0 说明 简单题 两倍两倍 include using namespace std void Qsort int a int low int high if low high int lown low int highn high int key a low while low high while low high a low a high while low a low low a high a low a low key Qsort a lown low 1 Qsort a low 1 highn int main int a 16 while 1 cin a 0 if a 0 1 break int i 1 for i 1 cin a i i Qsort a 0 i 1 int count 0 int b for int k 0 ka j j if j i cout count endl return 0 说明 自己写了个快排 再依次找两倍的对数 肿瘤面积肿瘤面积 include using namespace std int main int n a cin n int length 0 weigth 0 int ni 1 nj 1 int flag 0 for int i 0 i n i for int j 0 j a if ni 1 weigth 1 ni i nj j else if ni i if nj j cout length 2 weigth 2 endl 11 return 0 说明 简单题 看注释 肿瘤检测肿瘤检测 include using namespace std int v 4 2 1 0 0 1 1 0 0 1 int main int a 100 100 int n cin n for int i 0 i n i for int j 0 j a i j int x y int length 0 area 0 for int i 0 i n i for int j 0 j n j if a i j 50 area 记录面积 for int k 0 k 4 k 搜索四周是否是边界或大于的非肿瘤点 计算周长 x i v k 0 y j v k 1 if x 0 y50 length break cout area length return 0 说明 简单题 12 垂直直方图垂直直方图 include using namespace std int main int num 26 0 int n 4 char c while n c getchar if c A if c n n int max 0 for int i 0 i 26 i if max num i 找到最大数 max num i max while max for int i 0 i 26 i if num i max putchar num i else putchar if i 25 putchar else putchar n for int i 0 i 26 i 13 putchar i A if i 25 putchar else putchar n return 0 说明 有趣的模拟题 谁拿了最多奖学金谁拿了最多奖学金 include using namespace std int main char name 102 100 int money 102 0 int qm bj lw char gb xb int n int sum 0 cin n for int i 0 i name i qm bj gb xb lw if qm 80 if qm 85 if qm 90 money i 2000 if xb Y if bj 80 sum money i int maxi 0 for int i 0 i n i if money maxi money i maxi i 14 cout name maxi endl money maxi endl sum endl return 0 说明 依题意写就好了 化验诊断化验诊断 include using namespace std int main int k cin k char sex 10 float wbc rbc float hgb hct plt int count 0 while k cin sex wbc rbc hgb hct plt count 0 if wbc 4 0 if count cout count endl 15 else cout normal endl return 0 说明 注意条件的判断 简单密码简单密码 include using namespace std void change char a for int i 0 a i 0 i if a i A int main char a 202 while cin getline a 1000 strcmp a ENDOFINPUT if strcmp a START cout a endl return 0 说明 如题目所说 很简单 密码密码 include using namespace std char d 201 int zhan 201 201 16 int cycle 201 void count cycle int a int n 计算每位数的周期 for int i 0 i n n 0 int a 201 for int i 0 i a i count cycle a n int k while cin k k 0 cin get cin getline b 201 int i strlen b for i n i b i 填充空格 因为题目要求加密后字符串长度为n b n 0 d n 0 for int i 0 i n i d zhan i k cycle i b i 由刚才所得周期 安下每个字母 的位置 17 cout d endl cout endl return 0 说明 这道题得先去计算周期 不然会超时 这道题很经典 值得收藏 有人 用了 47ms 估计有更好的算法 数制转换问题数制转换问题 确定进制确定进制 include using namespace std int ary int a int n 转成10进制 int b 0 t 1 c 0 while a if c a 10 n return 1 else b c t t n a a 10 return b int main int T cin T while T int p q r cin p q r int a b c i for i 2 i 16 i 枚举出所有进制的可能性 18 a ary p i b ary q i c ary r i if a 1 b 1 c 1 continue else if a b c cout i 17 cout 0 endl return 0 说明 进制转换题 Skew 数数 include using namespace std int main char a 100 unsigned num 0 while cin a a 0 0 int len strlen a num 0 for int i len 1 t 1 i 0 i t 2 t 1 num t a i 0 cout num endl return 0 说明 按题意写 十进制到八进制十进制到八进制 include using namespace std 19 int main int a i 0 int b 100 cin a while a b i a 8 a 8 for int j i 1 j 0 j cout b j cout endl return 0 说明 进制转换基础 八进制到十进制八进制到十进制 include using namespace std int main int a cin a int b 0 int t 1 while a b a 10 t t 8 a 10 cout b endl return 0 说明 取第一个数 后乘以 8 n 1 2 进制转化为进制转化为 16 进制进制 include 20 using namespace std char v 2 2 2 2 0 1 2 3 4 5 6 7 8 9 A B C D E F int main unsigned long n cin n char a 10002 int i 0 int mod 0 while n int j 0 cin a int len strlen a while a j 0 int b 4 0 mod len 1 4 4 for int i mod i 0 i b i a j 0 len mod 1 cout v b 3 b 2 b 1 b 0 cout endl return 0 说明 因为转成16进制 所以有点麻烦 分别将0001 1111所对应的十六进编码 存于 V 中 从个位每四段进行转换就行了 八进制小数八进制小数 include using namespace std void division e unsigned long long a unsigned long long n int c int i 0 21 do a 10 c i a n a n while a c i 1 void add int a int b int len 0 int temp 0 while b len 1 len for int i len 1 i 0 i a i b i temp temp 0 if a i 10 temp a i 10 a i 10 int main char a 100 while cin a int d 50 0 cout a 8 unsigned long long n 8 for int i 2 a i 0 i n 8 int c 50 0 int s a i 0 division e s n c add d c cout 0i 22 d i 1 1 for int i 0 d i 1 i cout d i cout 10 endl return 0 说明 这道题上次比赛时又做了一次 居然不会做了 不过那道题没什么提示 所以做不出来了 这道题我第一次做的时候是用高精度写的 看了他的题意后 发现位数控制在15以内 而double最大15 16个有效数字 完全可以用 double float 6 7位 水过 不过上次比赛 貌似是100位 最后题目中的这个提示记住比较好 八进制里面的0 75等于十进制里面的 0 963125 7 8 5 64 这道题在进制运算中算经典了 如果没题目提示 很难 做出 涉及小数转换问题 字符串处理字符串处理 统计字符数统计字符数 include using namespace std int main int n cin n while n int max 26 int c cin get int v 27 0 while c cin get a n a v c for int i 0 iv max max i char a max a 23 cout a v max endl return 0 说明 用个 v 26 记录一下所有字母出现的次数即可 最后扫出最大的 487 3279 include include include char v 2223334445556667777888999 int a 100002 0 int main int n scanf d getchar for int i 0 i n i char c while c getchar n std sort a a n int flag 0 for int i 0 i0 printf 03d 04d d n a i 10000 a i a i 10000 10000 k 1 flag 1 if flag 0 24 printf No duplicates n return 0 说明 之前做过一次 这道题要排序后再找重复 任何时候都不要考虑自己写 排序算法 自写的排序算法如果写的不够sort好的话 就会超时 写好的快排 又浪费编程时间 这道题很经典 我开始学acm的时候就从这道题开始 做了很 久 很值得怀恋 子串子串 include using namespace std char a 101 102 int n void rev char a 字符串逆置 标准c 没strrev int len strlen a for int i 0 i len 2 i char t a i a i a len i 1 a len i 1 t int max samesub const char minstr int len strlen minstr char substr 101 revstr 101 int k 0 while k len for int i 0 i k i 从长到短 从左自右截取子串搜索 strncpy substr minstr i len k strncpy revstr minstr i len k substr len k revstr len k 0 后边记得加上结束标志 rev revstr int j 0 for j t while t char minstr 101 int min 101 cin n for int i 0 i a i int len strlen a i if len min min len strcpy minstr a i cout max samesub minstr endl 从最短的串中抽取子串去搜 return 0 说明 详情看注释 主要要记住几个字符串函数的用法 strlen 计算字符串长度 strncpy 复制字符串的子串 strcpy 复制字符串 strstr 搜索子字符串的位置 搜不到返回0 字符串判等字符串判等 include using namespace std int main int n cin n 26 while n char a 101 b 102 cin get cin getline a 102 cin getline b 102 int i 0 j 0 int flag 1 for a i 0 i j while a i while b j if a i b j a i 32 b j a i 32 b j flag 0 break if flag cout YES endl else cout NO endl return 0 说明 依题意写 简单题来的 All in All include using namespace std int main char a 100002 b 100002 while cin a b int i 0 j 0 for a i 0 if a i b j 相等的话 同时进位 不相等时只是b进位 j i 27 else j if a i 0 cout Yes endl else cout No endl return 0 说明 觉得当年写的代码自己看起来很不爽 重写了一遍 经典题来的 W 的密码的密码 include using namespace std char b 1000 void encrypt char a int p int k int len for int i 0 i k1 k2 k3 k1 0 int j 0 k 0 l 0 for int i 0 a i 0 i if a i a 28 encrypt a ai k1 j 对每组字符串进行移动加密 encrypt a jr k2 k encrypt a sz k3 l for int i 0 a i 0 i a i b i cout a endl return 0 说明 不错的题目 细想之后也不难写 古代密码古代密码 include include using namespace std int pa 26 0 int pb 26 0 int main char a 102 b 102 cin a b int i 0 for a i 0 i pa a i A pb b i A if b i 0 cout NO endl return 0 sort pa pa 26 sort pb pb 26 for i 0 i 26i if i 26 cout YES endl else cout NO endl return 0 29 说明 只要分别统计字母出现的频率 然后将频率排序 词典词典 include include char diction 1000000 2 11 0 unsigned int BKDRHash char str int i unsigned int seed 131 unsigned int hash 0 while str hash hash seed str return hash void hashinsert char a char b int i 0 int j 0 do j BKDRHash b i if diction j 0 0 0 strcpy diction j 0 b strcpy diction j 1 a return else i while i 10000000 int hashsearch char b int i 0 int j 0 do j BKDRHash b i if strcmp diction j 0 b 0 return j else i 30 while i 10000000 return 1 int main char a 11 b 11 char temp 26 while gets temp temp 0 0 sscanf temp s s a b hashinsert a b while scanf s a EOF int k hashsearch a if k 1 puts eh else printf s n diction k 1 说明 当时用hash表写 修改用map后 时间达2000多ms 不过可以过 至于 hash map搞了大半天 觉得用在char 太复杂了 而且这个东东不是标准的 vc6 0 g 也貌似不支持 不同编译器标准要不同 还是不要玩这个了 除 非是简单的int健 否则不要往这方向思考 include include include using namespace std struct str bool operator const str char e 12 int main map d str word s char t 30 31 while gets t d word s while scanf s word e EOF map iterator it d find word if it d end printf s n it second e else printf eh n return 0 最短前缀最短前缀 include include int cmppre char a char b int i 0 for a i b i i 返回最后一位不等的 return i int main char a 1001 22 int len 0 while scanf s a len EOF len for int i 0 i len i int max 0 for int j 0 jmax max k printf s a i 32 for int k 0 k maxk putchar a i k putchar n return 0 说明 经典题来的 相当经典 当年想出来的时候相当兴奋 浮点数格式浮点数格式 include int pointlen char a int i 0 while a i i return i int main int n scanf d char a 10001 52 int num 10001 int max 0 for int i 0 imax max num i for int i 0 i n i for int j 0 j max num i j putchar 输出空格来对准 puts a i return 0 说明 格式控制问题 33 日期和时间处理日期和时间处理 判断闰年判断闰年 include int main int a scanf d if a 4 0 else puts N return 0 说明 简单题 细菌繁殖细菌繁殖 include include int v 31 28 31 30 31 30 31 31 30 31 30 31 int main int n scanf d while n int moonth day l moonth l day int count 0 long num 10 scanf d d d d d for int i moonth 1 i l moonth 1 i count v i count l day day for int i 0 i count i num 2 printf d n num return 0 34 说明 用v 存下月的天数 再计算即可 细菌繁殖细菌繁殖 include include int v 31 28 31 30 31 30 31 31 30 31 30 31 int main int n scanf d while n int moonth day l moonth l day int count 0 long num 10 scanf d d d d d for int i moonth 1 i l moonth 1 i count v i count l day day for int i 0 i count i num 2 printf d n num return 0 说明 简单题 日历问题日历问题 include int type int m if m 4 0 m 100 0 判断闰年 else return 1 int main char week 7 10 Saturday Sunday Monday Tuesday Wednesday Thur sday Friday 星期表 35 int month 2 12 31 28 31 30 31 30 31 31 30 31 30 31 31 29 31 30 31 30 3 1 31 30 31 30 31 这里有一个技巧 即用type函数来返回闰年的月和天数 int year 2 365 366 int days dayfweek int i 0 j 0 while scanf d for i 2000 days year type i i days year type i for j 0 days month type i j j days month type i j printf d 02d 02d s n i j 1 days 1 week dayfweek 这里 月和天数都要加 return 0 说明 麻烦的日期问题 花了一短时间才搞定 玛雅历玛雅历 include include char month1 19 10 pop no zip zotz tzec xul yoxkin mol chen yax zac ceh mac kankin muan pax koyab cumhu uayet 这道题麻烦的地方在这 char month2 20 10 imix ik akbal kan chicchan cimi manik lamat muluk ok chuen eb ben ix mem cib caban ezna b canac ahau int count char a int i 0 for i 19i return i int main int n 36 scanf d printf d n n while n int year 0 days 0 int num 0 char month 10 scanf d s d 读出haab历的年月日 int n month count month 找到月份对应的数字 num year 365 n month 20 days 计算距离世界开始的天数 从开 始 printf d s d n 1 num 13 month2 num 20 num 260 return 0 说明 不难 但麻烦 取余的时候要注意 时区转换时区转换 include include int difference char zone1 char zone2 计算两个时区间的时差 char zone 32 UTC GMT BST IST WET WEST CET CEST EET EEST MSK MSD AST ADT NST NDT EST EDT CST CDT MST MDT PST PDT HST AKST AKDT AEST AEDT ACST ACDT AWST float time 32 0 0 1 1 0 1 1 2 2 3 3 4 4 3 3 5 2 5 5 4 6 5 7 6 8 7 10 9 8 10 11 9 5 10 5 8 int i 0 for strcmp zone1 zone i i 找到第一个时区对应的位置 int j 0 for strcmp zone2 zone j j 找到第二个时区对应的位置 return int time i time j 60 计算并返回时差 以分钟为单位 int main int N scanf d 读入数据数目 37 while N char time 20 zone1 10 zone2 10 int t 0 int hour minute scanf s time 输入时间 switch time 0 转换为整数 case n hour 12 minute 0 break case m hour 0 minute 0 break default sscanf time d d hour 12 scanf s time if time 0 p hour 12 scanf s s zone1 zone2 t hour 60 minute difference zone2 zone1 新的时间 if t 0 若小于 则提前一天 将负的时间加上一天的时间 t 1440 t 1440 如果超过一天 将一天的时间减去 switch t case 0 puts midnight break 新时间为凌晨 case 720 puts noon break 新时间为中午 default hour t 60 minute t 60 if hour 0 凌晨 分不为 printf 12 02d a m n minute else if hour 12 上午 printf d 02d a m n hour minute else if hour 12 中午 分不为 printf 12 02d p m n minute else 下午 38 printf d 02d p m n hour 12 minute return 0 说明 这道题麻烦在于 上午中午凌晨时间要做相应的判断 不吉利日期不吉利日期 include int main int month 12 31 28 31 30 31 30 31 31 30 31 30 31 int w scanf d int day 12 时间假设从0日开始 for int i 0 day 365i if w day 7 5 printf d n i 1 day month i return 0 说明 日期问题 特殊日历计算特殊日历计算 include int mon 2 12 31 28 31 30 31 30 31 31 30 31 30 31 31 29 31 30 31 30 31 31 30 31 30 31 int yea 2 365 366 inline bool type int year if year 4 0 else return 0 39 int main int N scanf d while N int hour minute second day month year scanf d d d d d d int mhour mmin msec mday mmonth myear int ty type year int num 0 num year 2000 365 year 1 4 year 1 100 year 1 400 484 计算从开始后的天数 是年以前的闰年数 for int i 0 i month 1 i num mon ty i num day num myear num 1000 int t hour 3600 minute 60 second mmonth num myear 1000 100 1 精度处理当年好像花了点时间 mday num myear 1000 mmonth 1 100 1 mhour 10 t 86400 mmin 1000 t 86400 100 mhour msec 125 t 108 1000 mhour 100 mmin 100 printf d d d d d d n mhour mmin msec mday mmonth myear return 0 说明 此题不难 但麻烦 模拟题模拟题 约瑟夫问题约瑟夫问题 include int main int n m 40 while scanf d d int i 0 count 0 int num 0 for i 0 1 i i 1 n if a i 0 count if count m 0 num a i 1 if num n break printf d n i 1 return 0 说明 简单的模拟题 数量大的话得使用数论的方法 include using namespace std int main int m n cin m n int left 1 for int i 2 i m i left left n i if left 0 left i cout left endl return 0 n个人玩这个游戏的时候 假设最后剩下的r个人中 其中一个人占据了第p个位 置 那当我们以n 1个人开始玩游戏的时候 显然 这第n 1个人希望被安排 到第p m个位置 因为如果第p个人是安全的 那么至少这第 p m MOD 41 n 1 个位置上的人也是安全的 他的理由是 既然现在是n 1个人玩 仍然 只能留r个人 那么只要在n个人剩余的r个人里面有一个人在我之前退出就可以 了 所以我要加在这第r个人中某个人的后面m处 对应的 如果n个人玩的时 候 第q个位置上的人退出了圈子 那n 1个人玩的时候第 q m MOD n 1 个位置上的人也得退出圈子 根据前面的递推公式 显然我们可以通过逆推 得到最终解 摘花生摘花生 include include include struct pea 为排序 弄一个类 int i int j int num bool cmp const pea a const pea b return a num b num int main int T int M N K scanf d while T int k 0 num 0 pea a 2500 int s 0 scanf d d d for int i 1 i M i for int j 1 j N j scanf d if num 0 a k num num a k i i a k j j k 42 std sort a a k cmp 排序 int i 0 j 0 for int l 0 lK 判断回去的时候是否有时间 break i a l i j a l j s a l num 累积摘到的花生数 else int t abs a l i i abs a l j j 1 下个目标的长 度 if t a l i K 判断能否回去 break s a l num K t i a l i j a l j printf d n s return 0 说明 排序后 再依次找花生比较快 显示器显示器 include include char v1 5 6 0 1 2 1 int v 5 10 0 1 0 0 1 0 0 0 0 0 3 2 2 2 3 4 4 2 3 3 1 1 0 0 0 0 0 1 0 0 3 2 4 2 2 2 3 2 3 2 0 1 0 0 1 0 0 1 0 0 void print int n int step int s if v1 v step n 0 0 43 for int j 0 j 2 s j putchar else putchar for int j 0 j 1 j 2 s v1 v step n i 0 j putchar else printf c v1 v step n i putchar int main int s char n 20 while scanf d s n i 0 i print n i 0 0 s printf n for int j 0 j s j for int i 0 n i 0 i 44 print1 n i 0 1 s printf n for int i 0 n i 0 i print

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论