NC200382. JK表达式
描述
1. 如果+号两边都是数字组成的,则直接数学运算相加,如1 + 2 = 32. 如果+号两边都是字母组成的,则直接将两边连接,如AA + BB = AABB3. 如果+号两边一边是数字组成的,一边是字母组成的,则将字母部分重复数字所表示的次数,如2 + JK = JKJK
输入描述
有多组输入。
每组输入小莞心中所想的a, b, c, d, e, f, g, h, i, j, k,可能是数字或大写英文字母
输出描述
对于每组输入,输出一行,代表JK表达式a+(b+c+(d+e))+(f+(g+h+i))+(j+k)的计算结果
示例1
输入:
T X 0 9 L O 3 9 R W U 7 5 4 0 S 0 7 1 3 T 0
输出:
TLLLLLLLLLORRRRRRRRRRRRWU
C++11(clang++ 3.9) 解法, 执行用时: 10ms, 内存消耗: 1308K, 提交时间: 2019-12-18 20:48:59
#include<bits/stdc++.h> typedef long long ll; using namespace std; int type(string s) { if(s[0]>='0' && s[0]<='9') return 1; return 0; } string add(string a,string b) { int x=type(a),y=type(b); if(x==1&&y==1) return to_string(stoi(a)+stoi(b)); if(x+y==1) { if(x==0) { string ret; for(int i=1;i<=stoi(b);++i) ret+=a; return ret; } if(y==0) { string ret; for(int i=1;i<=stoi(a);++i) ret+=b; return ret; } } return a+b; } int main() { string a,b,c,d,e,f,g,h,i,j,k; while(cin>>a>>b>>c>>d>>e>>f>>g>>h>>i>>j>>k) { cout<<add(add(add(a,add(add(b,c),add(d,e))),add(f,add(add(g,h),i))),add(j,k))<<endl; } }
Python3(3.5.2) 解法, 执行用时: 33ms, 内存消耗: 4984K, 提交时间: 2019-12-14 17:22:35
#! /usr/bin/env python # -*- coding: utf-8 -*- def plus(a, b): if a.isdigit(): if b.isdigit(): return str(int(a)+int(b)) else: return b*int(a) else: if b.isdigit(): return a*int(b) else: return a+b def cal(a, b, c, d, e, f, g, h, i, j, k): de = plus(d, e) bc = plus(b, c) bcde = plus(bc, de) gh = plus(g, h) ghi = plus(gh, i) fghi = plus(f, ghi) jk = plus(j, k) a_e = plus(a, bcde) a_i = plus(a_e, fghi) out = plus(a_i, jk) return out ans = [] while True: try: s = input().split() ans.append(cal(*s)) except: break for i in ans: print(i)
C++14(g++5.4) 解法, 执行用时: 58ms, 内存消耗: 1256K, 提交时间: 2019-12-13 23:12:02
#include<bits/stdc++.h> using namespace std; template<typename T1,typename T2> T2 convert(T1 x){ stringstream ss;T2 ret; ss<<x;ss>>ret; return ret; } auto tonum=convert<string,int>; auto tostr=convert<int,string>; auto isnum=[](string x){return tostr(tonum(x))==x;}; string operator*(string a,string b){ if (isnum(a)&&isnum(b))return tostr(tonum(a)+tonum(b)); if (!isnum(a)&&!isnum(b))return a+b; if (isnum(a))swap(a,b); string ret=""; for (int i=0;i<tonum(b);i++)ret+=a; return ret; } int main(){ string a,b,c,d,e,f,g,h,i,j,k; while(cin>>a>>b>>c>>d>>e>>f>>g>>h>>i>>j>>k) cout<<a*(b*c*(d*e))*(f*(g*h*i))*(j*k)<<endl; }