NC54613. Broken LED
描述
我从十二岁起,便在这个超市里当收银员,老板娘说,我样子太傻,怕侍候不了顾客,就在柜台收收钱吧。但我脑子不灵光,操作收银台速度也慢,常常在后面排着二十几个人的情况下一个人慢吞吞地收钱。所以过了几天,老板娘又说我干不了这事。幸亏荐头的情面大,辞退不得,便改为专管操作刷卡机的一种无聊职务了。
我从此便整天的站在柜台里,专管我的职务。虽然没有什么失职,但总觉得有些单调,有些无聊。只有Bob到店,才可以笑几声,所以至今还记得。
xx带学的超市的刷卡机,是用上面图里的那种数码管显示的四位整数。把卡放到读卡器上,就可以显示出卡里的余额。有天,Bob到了店里,对柜里说:“拿两支笔,要一根烤香肠。” 便把卡放到读卡器上,但恰好那天,读卡器坏了,有几根数码管本应亮着,却错误地灭掉了,但我并不知道有哪几根管子坏了。于是,他对我说道,“你读过书么?”我略略点一点头。他说,“读过书,……我便考你一考。你看我把卡放上去,它就读出了一个四位数,但是这个四位数是不准确的,因为有几根管子坏掉了。对不对?我现在买了元的东西,你看这个读卡器显示的余额,我在最乐观的情况下余额能不能够买下这元的东西?”
我人都傻了,求助排在队伍后面的你帮我回答他这个问题。
输入描述
第一行是一个正整数,表示测试数据的规模。接下来组数据,每组数据第一行是一个整数,表示Bob买的商品的总价格;接下来有7行字符串,每行长为27(=6*4+3)个字符,表示读卡器读出的内容图样。 . 表示该位置为灭,而 X (大写字母X)表示该格为亮。每个数字的高度为7个字符,宽度为6个字符,相邻的数字之间用一列 . 隔开。具体地,每种数字的表示方式见下方。每个数字一共用7根数码管表示,每根数码管不是亮的就是灭的,即不会出现同一根数码管上一段为亮,另一段为灭的情况。注意可能有一些数码管错误地灭掉了,但不可能出现本应灭掉的数码管错误地亮起的情况。
输出描述
对每组数据,输出一行"Yes"(不含引号)表示在最乐观的情况下,Bob的钱能够买下这元的商品,否则输出一行"No"(不含引号),表示无论如何Bob都不可能买下这元的商品。注意大小写。
示例1
输入:
3 4396 .XXXX...XXXX............... X......X....X.X....X......X X......X....X.X....X......X .XXXX..........XXXX........ .....X.X....X......X......X .....X.X....X......X......X .XXXX...XXXX............... 701 ........XXXX...XXXX...XXXX. .......X...........X......X .......X...........X......X ........XXXX...XXXX...XXXX. .......X....X......X.X..... .......X....X......X.X..... ........XXXX...XXXX...XXXX. 9961 ........XXXX...XXXX........ .....X.X....X......X.X....X .....X.X....X......X.X....X ...............XXXX...XXXX. .....X.X....X.X...........X .....X.X....X.X...........X ........XXXX...XXXX........
输出:
Yes Yes No
说明:
对第一组样例,显示的数字5014>4396,所以可以买下商品。Python3(3.9) 解法, 执行用时: 109ms, 内存消耗: 2684K, 提交时间: 2020-11-20 15:12:23
T=int(input()) def f(l): if l[5][0]=='X': return '8' else: return '9' for i in range(T): x=int(input()) s='' a,b,c,d=[],[],[],[] for j in range(7): s=input() a.append(s[:6]) b.append(s[7:13]) c.append(s[14:20]) d.append(s[21:27]) n=f(a)+f(b)+f(c)+f(d) n=int(n) if n>=x: print('Yes') else: print('No')
C++(clang++11) 解法, 执行用时: 42ms, 内存消耗: 376K, 提交时间: 2020-11-22 22:36:10
#include<bits/stdc++.h> using namespace std; int main(){ int t,n,sum; char s[10][30]; scanf("%d",&t); while (t--){ cin>>n; sum=0; for (int i=1;i<=7;i++){ cin>>s[i]; } for (int i=3;i>=0;i--){ if (s[5][7*i]=='X'){ sum+=8*pow(10,(3-i)); }else{ sum+=9*pow(10,(3-i)); } } if (sum>=n){ cout<<"Yes"<<endl; }else{ cout<<"No"<<endl; } } return 0; }