NC25155. 烙印
描述
输入描述
Line 1: 三个用空格分隔的整数,分别是: N, start, 和 finish。
Lines 2..N+1: 第 i+1 行含有若干个 (1..26) 字符,表示RFID代码在第i个
位置可以取的字符集。
输出描述
Lines 1..finish-start+1: 第 i 行是排在start+i-1的 RFID 代码。
示例1
输入:
4 6 13 ABC CDELQ CFH ABC
输出:
ADHB ADHC AECB AEFB AEFC AEHB AEHC ALCB
说明:
RFID 代码有4位;输出第6个到第13个代码。Pascal(fpc 3.0.2) 解法, 执行用时: 199ms, 内存消耗: 344K, 提交时间: 2019-06-16 10:47:10
var c:array['A'..'Z']of boolean; a,b:array[1..26]of char; i,j,yi,n,er,sum,t:longint; s:array[1..15]of string; procedure dfs(x:longint); var k:longint; begin if x=n+1 then begin t:=t+1; if t>er then halt; if(t>=yi)and(t<=er) then begin for k:=1 to n do write(b[k]); writeln; end; end else begin for k:=1 to length(s[x]) do begin if c[s[x][k]]=false then begin b[x]:=s[x][k]; c[s[x][k]]:=true; dfs(x+1); c[s[x][k]]:=false; end; end; end; end; begin readln(n,yi,er); for i:=1 to n do readln(s[i]); dfs(1); end.
C++11(clang++ 3.9) 解法, 执行用时: 156ms, 内存消耗: 612K, 提交时间: 2019-06-14 14:50:36
#include<bits/stdc++.h> #define maxn 30 using namespace std; int sum[maxn],a[maxn][maxn],ans[maxn],n,l,r,a1,t[1010]; char s[maxn]; void dfs(int p){ if(a1>r)return; if(p==n+1){ a1++; if(a1>=l&&a1<=r){ for(int i=1;i<=n;i++)cout<<(char)ans[i]; cout<<endl; } return; } for(int j=1;j<=sum[p];j++){ if(t[a[p][j]])continue; t[a[p][j]]=1;ans[p]=a[p][j]; dfs(p+1);t[a[p][j]]=0; } return; } int main(){ scanf("%d%d%d",&n,&l,&r); for(int i=1;i<=n;i++){ scanf("%s",s+1);a1=strlen(s+1); for(int j=1;j<=a1;j++)a[i][j]=(int)s[j]; sort(a[i]+1,a[i]+1+a1);sum[i]=a1; } a1=0;dfs(1); return 0; }
C++14(g++5.4) 解法, 执行用时: 122ms, 内存消耗: 504K, 提交时间: 2019-06-14 23:11:06
#include <iostream> #include <stdio.h> using namespace std; int n,s,e,cnt=0; string model[20]; char mark[20],dead[300]; void dfs(int pos) { if(pos>n) { cnt++; if(cnt>=s) { printf("%s\n",mark+1); if(cnt==e) exit(0); } return; } for(int i=0;i<model[pos].size();i++) { char ch=model[pos][i]; if(dead[ch]) continue; dead[ch]=1;mark[pos]=ch; dfs(pos+1); dead[ch]=0; } return; } int main() { ios::sync_with_stdio(false); cin>>n>>s>>e; for(int i=1;i<=n;i++) cin>>model[i]; dfs(1); return 0; }