NC200578. 奇怪的回文子串
描述
输入描述
首先输入样例组数
接下来对于每组样例输入四个数,。
接下来n行每行输入一个小写字母,一个数字,代表字符最多出现次
输出描述
对于每个样例输出你构造好的字符串,如果无法完成构造输出-1。
示例1
输入:
2 0 4 2 0 2 5 3 2 a 3 b 2
输出:
aaaa aaabb
Python3(3.5.2) 解法, 执行用时: 238ms, 内存消耗: 5432K, 提交时间: 2020-07-31 15:01:03
# 君指先跃动の光は、私の一生不変の信仰に、唯私の超电磁炮永生き! from sys import stdin, stdout import math from itertools import permutations import random def soulution(): t = int(input().strip()) for _ in range(t): arr = [9999] * 26 n, l, x, y = map(int, input().strip().split()) for i in range(n): ch, cn = map(lambda ele: ele.strip(), input().split()) arr[ord(ch) - ord('a')] = int(cn) pend = [] for i in range(26): if arr[i] == 9999: pend.append(chr(ord('a') + i)) s = pend[0] * (x - 1) cur = 0 while len(s) != l: s += pend[cur] cur = (cur + 1) % len(pend) print(s) soulution()
C++14(g++5.4) 解法, 执行用时: 46ms, 内存消耗: 1508K, 提交时间: 2019-12-28 21:35:55
#include<iostream> using namespace std; int a[30]; int main() { int t; cin >> t; while (t--) { for (int i = 0; i < 30; i++) a[i] = -1; int n, len, x, y; cin >> n >> len >> x >> y; while (n--) { char c; int cl; cin >> c >> cl; a[c - 'a'] = cl; } char k[4]; int num = 0; for (int i = 0; i < 26; i++) { if (a[i] == -1) k[num++] = i + 'a'; if (num >= 4) break; } for (int i = 0; i < x; i++) cout << k[0]; for (int i = 0; i < len - x; i++) { cout << k[i % 3 + 1]; } cout << endl; } }
C++11(clang++ 3.9) 解法, 执行用时: 6ms, 内存消耗: 1272K, 提交时间: 2020-07-16 11:57:18
#include<bits/stdc++.h> using namespace std; int main() { int i,n,len,x,y,t,L,V[26]; char c,T[26],ans[1005]; scanf("%d",&t); while(t--) { memset(V,-1,sizeof(V)),L=0; scanf("%d%d%d%d",&n,&len,&x,&y); while(n--)scanf(" %c%d",&c,&i),V[c-'a']=i; for(i=0;i<26;i++)if(V[i]==-1)T[L++]=i+'a'; for(i=0;i<x;i++)ans[i]=T[0]; for(;i<len;i++)ans[i]=T[i%3+1]; ans[len]='\0',printf("%s\n",ans); } }