XYD模考T2WA25分样例过求救

2. 牛牛爱拼字

题目ID:21635必做题100分

最新提交:

Wrong Answer

25 分

历史最高:

Wrong Answer

25 分

时间限制: 1000ms

空间限制: 262144kB

题目描述

为了提高词汇量,奶牛贝茜得到了一套四个木质方块,每个方块的六个面都印有一个大写字母。她希望通过排列这些方块,使顶面的字母组成目标单词。

给定每个方块的字母(每行输入代表一个方块的六个字母)以及贝茜想拼写的单词列表,请判断她是否能成功拼出每个单词。

输入格式

第一行:单词数量 N。

接下来4行:每行包含6个大写字母,表示一个方块的六个面。
随后 N 行:每行一个待检查的单词(长度1到4个字母)。

输出格式

对每个单词,若能用方块拼出则输出 YES,否则输出 NO

样例

Input 1

6 MOOOOO OOOOOO ABCDEF UVWXYZ COW MOO ZOO MOVE CODE FARM

Output 1

YES NO YES YES NO NO

样例解释

COW:可用方块拼出(例如,用第1、2、4方块的C、O、W)。

MOO:无法拼出,因为含M的方块无法同时提供O。

ZOO:可用第4、2、1方块的Z、O、O。

MOVE:可用第1、4、3、2方块的M、O、V、E。

CODE:无法拼出,因为C、D、E均来自第3个方块(但一个方块只能提供一个字母)。

FARM:无法拼出,因无方块含字母R。

数据范围

1≤N≤10‘

本蒟蒻从WA10改到WA的代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;
char a[10][10];
map<string,bool> mp;

int main(){
	cin>>n;
	for(int i=1;i<=4;i++){
		for(int j=1;j<=6;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=6;i++){
		for(int j=1;j<=6;j++){
			for(int k=1;k<=6;k++){
				for(int m=1;m<=6;m++){
					char kk[4]={0};
					kk[0]=a[1][i];
					kk[1]=a[2][j];
					kk[2]=a[3][k];
					kk[3]=a[4][m];
					//cout<<kk[0]<<" "<<kk[1]<<" "<<kk[2]<<" "<<kk[3]<<endl;
					sort(kk,kk+3);
					string sl="";
					//cout<<(sl+kk[0]+kk[1]+kk[2]+kk[3])<<endl;
					mp[/*(string)*/(sl+kk[0]+kk[1]+kk[2]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[1]+kk[2])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[1]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[2]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[1]+kk[2]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[1])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[2])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[1]+kk[2])]=1;
					mp[/*(string)*/(sl+kk[1]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[2]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[0])]=1;
					mp[/*(string)*/(sl+kk[1])]=1;
					mp[/*(string)*/(sl+kk[2])]=1;
					mp[/*(string)*/(sl+kk[3])]=1;
				}
			}
		}
	}
	cout<<endl;
	for(int lkdfsldk=0;lkdfsldk<n;lkdfsldk++){
		string s;
		cin>>s;
		char kk[4];
		for(int i=0;i<s.size();i++){
			kk[i]=s[i];
		}
		sort(kk,kk+s.size());
		
		string sl="";
		for(int i=0;i<s.size();i++){
			sl=sl+kk[i];
		}
		/*cout<<sl<<endl;
		continue;*/
		if(mp[sl]==1){
			cout<<"YES"<<endl;
		}
		else{
			cout<<"NO"<<endl;
		}
	}
	return 0;
}
/*
 
   

A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
*/

这是什么?

无影响,因为样例过了

结果一样,不用考虑这个

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;
char a[10][10];
map<string,bool> mp;

int main(){
	cin>>n;
	for(int i=1;i<=4;i++){
		for(int j=1;j<=6;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=6;i++){
		for(int j=1;j<=6;j++){
			for(int k=1;k<=6;k++){
				for(int m=1;m<=6;m++){
					char kk[4]={0};
					kk[0]=a[1][i];
					kk[1]=a[2][j];
					kk[2]=a[3][k];
					kk[3]=a[4][m];
					//cout<<kk[0]<<" "<<kk[1]<<" "<<kk[2]<<" "<<kk[3]<<endl;
					sort(kk,kk+3);
					string sl="";
					//cout<<(sl+kk[0]+kk[1]+kk[2]+kk[3])<<endl;
					mp[/*(string)*/(sl+kk[0]+kk[1]+kk[2]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[1]+kk[2])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[1]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[2]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[1]+kk[2]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[1])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[2])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[1]+kk[2])]=1;
					mp[/*(string)*/(sl+kk[1]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[2]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[0])]=1;
					mp[/*(string)*/(sl+kk[1])]=1;
					mp[/*(string)*/(sl+kk[2])]=1;
					mp[/*(string)*/(sl+kk[3])]=1;
				}
			}
		}
	}
	//cout<<endl;
	for(int lkdfsldk=0;lkdfsldk<n;lkdfsldk++){
		string s;
		cin>>s;
		char kk[4];
		for(int i=0;i<s.size();i++){
			kk[i]=s[i];
		}
		sort(kk,kk+s.size());
		
		string sl="";
		for(int i=0;i<s.size();i++){
			sl=sl+kk[i];
		}
		/*cout<<sl<<endl;
		continue;*/
		if(mp[sl]==1){
			cout<<"YES"<<endl;
		}
		else{
			cout<<"NO"<<endl;
		}
	}
	return 0;
}
/*
 
    \__/
 \ /   \ /
—|o_o | —
 /\ _ /\ 
   / \
00000000-0010-0824-0000-000000000000

A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
*/

还是WA25

我看看稍等

看上去好像没问题

是不是不用初始化?因为下面有赋值

没用
正确率狂掉

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;
char a[10][10];
map<string,bool> mp;

int main(){
	cin>>n;
	for(int i=1;i<=4;i++){
		for(int j=1;j<=6;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=6;i++){
		for(int j=1;j<=6;j++){
			for(int k=1;k<=6;k++){
				for(int m=1;m<=6;m++){
					char kk[4];
					kk[0]=a[1][i];
					kk[1]=a[2][j];
					kk[2]=a[3][k];
					kk[3]=a[4][m];
					//cout<<kk[0]<<" "<<kk[1]<<" "<<kk[2]<<" "<<kk[3]<<endl;
					sort(kk,kk+3);
					string sl="";
					//cout<<(sl+kk[0]+kk[1]+kk[2]+kk[3])<<endl;
					mp[/*(string)*/(sl+kk[0]+kk[1]+kk[2]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[1]+kk[2])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[1]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[2]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[1]+kk[2]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[1])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[2])]=1;
					mp[/*(string)*/(sl+kk[0]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[1]+kk[2])]=1;
					mp[/*(string)*/(sl+kk[1]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[2]+kk[3])]=1;
					mp[/*(string)*/(sl+kk[0])]=1;
					mp[/*(string)*/(sl+kk[1])]=1;
					mp[/*(string)*/(sl+kk[2])]=1;
					mp[/*(string)*/(sl+kk[3])]=1;
				}
			}
		}
	}
	//cout<<endl;
	for(int lkdfsldk=0;lkdfsldk<n;lkdfsldk++){
		string s;
		cin>>s;
		char kk[4];
		for(int i=0;i<s.size();i++){
			kk[i]=s[i];
		}
		sort(kk,kk+s.size());
		
		string sl="";
		for(int i=0;i<s.size();i++){
			sl=sl+kk[i];
		}
		/*cout<<sl<<endl;
		continue;*/
		if(mp[sl]==1){
			cout<<"YES"<<endl;
		}
		else{
			cout<<"NO"<<endl;
		}
	}
	return 0;
}
/*
 
    \__/
 \ /   \ /
—|o_o | —
 /\ _ /\ 
   / \
00000000-0010-0824-0000-000000000000

A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
*/

后面要-1吧

可能会越界,而且从0开始就要-1

结果如下
image

(帖子已被作者删除)

应该不是这种非常明显的错误,因为样例对了

sort排序确定对么?因为我不常用

我的确忘了啥顺序了,但是sort使用默认顺序,我处理初始化的一堆字符串了待处理字符串都是用的默认顺序,也不是这个问题
而且我还调试了

这是+ 4吧

输入不了,CPU快速升温

sort不是左闭右开么?

你发一下最新代码

改了就过了,你试试