Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

竟然有空格!!!我晕,这个数据。。。服。。。为这个白贡献一次哇。。

Posted by KatrineYang at 2017-01-24 11:50:46 on Problem 1506 and last updated at 2017-01-24 11:51:42
In Reply To:Test Posted by:aoxboxcox at 2014-07-01 11:36:12
另外,用了点std::string就500ms,这是多大的I/O???
> Input:
> 1
> 4 6
> dd
> dc
> da
> c
> ab
> aa
> eee aaa eee
> 
> Output:
> eee ddd eee
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;

bool xiaoyu(string &s1, string &s2, bool shuier[26][26]){
	//当s1<s2時,将符合条件的关系填入shuier
	int l1 = s1.length(), l2 = s2.length();
	for(int i = 0; i < l1 && i < l2; i++){
		if(s1[i] != s2[i]){
			shuier[s1[i]-'a'][s2[i]-'a'] = 1;
			//cout << s1[i] << "<" << s2[i] << endl;
			return true;
		}
	}
	if(l1 > l2) return false;
	return true;
}

bool dfs_h(bool shuier[26][26], bool used[26], int start, int tar, int A, int *hou){
	if(start != tar) (*hou)++;
	used[start] = 1;
	for(int i = 0; i < A; i++){
		if(!used[i] && shuier[start][i]){
			if(shuier[i][tar] || !dfs_h(shuier, used, i, tar, A, hou)) return false;
		}
	}
	return true;
}

void dfs_q(bool shuier[26][26], bool used[26], int start, int tar, int A, int *qian){
	if(start != tar) (*qian)++;
	used[start] = 1;
	for(int i = 0; i < A; i++){
		if(!used[i] && shuier[i][start]){
			dfs_q(shuier, used, i, tar, A, qian);
		}
	}
}

bool jiancha(bool shuier[26][26], int decrypt[26], int A){
	for(int i = 0; i < A; i++) decrypt[i] = -1;
	for(int i = 0; i < A; i++){
		int qian = 0, hou = 0;
		bool used_h[26] = {0};
		if(!dfs_h(shuier, used_h, i, i, A, &hou)) return false;
		bool used_q[26] = {0};
		dfs_q(shuier, used_q, i, i, A, &qian);
		if(qian + hou == A-1) decrypt[i] = qian;
	}
	return true;
}

int main() {
	int n;
	cin >> n;
	for(int ii = 0; ii < n; ii++){
		int A,K;
		cin >> A >> K;
		bool shuier[26][26] = {{0}};
		string s1, s2;
		bool ky = true;
		for(int i = 0; i < K; i++){
			if(!ky) {
				cin >> s1;
				continue;
			}
			if(i%2==0) cin >> s1;
			else cin >> s2;
			if(!i) continue;
			if(i%2==0) ky = xiaoyu(s2, s1, shuier);
			else ky = xiaoyu(s1, s2, shuier);
		}
		string resStr, s;
		while(!s.length()) getline(cin, s);//cin >> s就不行。。。
		if(!ky){
			cout << "Message cannot be decrypted." << endl;
			continue;
		}
		int decrypt[26];
		if(!jiancha(shuier, decrypt, A)){
			cout << "Message cannot be decrypted." << endl;
			continue;
		}
		int len = s.length();
		for(int i = 0; i < len; i++){
			if(s[i] < 'a' || s[i] >= 'a'+A){
				resStr += s[i];
			}
			else if(decrypt[s[i]-'a'] == -1){
				ky = false;
				break;
			}
			else{
				resStr += (char)('a'+decrypt[s[i]-'a']);
			}
		}
		if(!ky) cout << "Message cannot be decrypted." << endl;
		else cout << resStr << endl;
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator