1 条题解
-
0
C :
#include <stdio.h> #include <string.h> int sort(char str[]) { int set[11]; for(int i=0;i<11;i++) set[i]=0; char qe[11]; int first=0,rear=0; qe[rear++]=str[0]; set[str[0]-'0']=1; while(first!=rear) { char ch=qe[first++]; for(int i=0;i<strlen(str);i++) { if(ch>str[i]&&set[str[i]-'0']==0) { set[str[i]-'0']=1; qe[rear++]=str[i]; break; } } for(int i=0;i<strlen(str);i++) { if(ch<str[i]&&set[str[i]-'0']==0) { set[str[i]-'0']=1; qe[rear++]=str[i]; break; } } } for(int i=0;i<strlen(str);i++) { str[i]=qe[i]; } return 0; } int main() { while(1) { int n; char std[11]; char in[11]; scanf("%d",&n); if(n==0) { break; } scanf("%s",std); sort(std); for(int i=0;i<n;i++) { scanf("%s",in); sort(in); if(strcmp(in,std)==0) { printf("YES\n"); } else { printf("NO\n"); } } } return 1; }
C++ :
#include<iostream> #include<string> using namespace std; //递归判断是否是同一棵二叉搜索树 //时间复杂度O(nlogn) bool is_same(string a,string b) { if(a==b) return true; if(a[0]!=b[0]) return false; string a1,a2,b1,b2; unsigned i; for(i=1;i<a.size();i++) { if(a[i]>a[0]) a2+=a[i]; else a1+=a[i]; if(b[i]>b[0]) b2+=b[i]; else b1+=b[i]; } if(is_same(a1,b1)&&is_same(a2,b2)) return true; else return false; } int main() { int m; string a,b; while(1) { cin>>m; if(m==0) break; cin>>a; for(int j=0;j<m;j++) { cin>>b; if(is_same(a,b)) cout<<"YES"<<endl; else cout<<"NO"<<endl; } } return 0; }
Java :
import java.util.Arrays; import java.util.Scanner; public class Main { static int[] ftree = new int[11111]; static int[] stree = new int[11111]; public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) { int n = in.nextInt(); if (n == 0) break; String s = in.next(); Arrays.fill(ftree,-1); for (int i = 0; i < s.length(); i++) { int x = s.charAt(i)-'0'; int j = 1; while(ftree[j]!=-1){ if(x<=ftree[j]) j = j*2; else j = j*2+1; } ftree[j] = x; } for (int i = 0; i < n; i++) { String s1 = in.next(); Arrays.fill(stree, -1); for (int k = 0; k < s1.length(); k++) { int x = s1.charAt(k) - '0'; int j = 1; while (stree[j] != -1) { if (x <= stree[j]) j = j * 2; else j = j * 2 + 1; } stree[j] = x; } boolean flag = true; for (int k = 0; k < ftree.length; k++) { if (ftree[k] != stree[k]) { flag = false; break; } } if (flag) System.out.println("YES"); else System.out.println("NO"); } } } }
- 1
信息
- ID
- 1115
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者