回文问题 - 我在这里做错了什么?
Palindrome problem - What am I doing wrong Here?
问题陈述:
给你一个二进制字符串 S 和一个整数 K。在一个操作中,你可以选择任何位并将其翻转,即将 0 变为 1 或将 1 变为 0。你可以使用恰好 K 操作使字符串 S 成为回文吗?
如果可能就打印 YES,否则打印 NO。
输入格式
输入的第一行包含一个整数T,表示测试用例的数量。 T 测试用例的描述如下。
每个测试用例由两行输入组成。
每个测试用例的第一行包含两个 space 分隔的整数 N 和 K,表示二进制字符串的长度和要执行的操作数。
第二行包含二进制字符串 S。
输出格式
对于每个测试用例,在新行上打印答案——如果 S 可以使用恰好 K 次操作成为回文,则为 YES,否则为 NO。
YES 和 NO 的每个字符都可以大写或小写打印(例如,yes、yEs、Yes 都将被视为相同)。
我的解决方案:
T = int(input())
for i in range(T):
N,K = map(int,input().split())
S = input()
counter = 0
for i in range(int(len(S)/2)):
if S[i] == S[-1-i]:
continue
else:
counter = counter + 1
if counter == K:
print("Yes")
else:
print("No")
但是在提交时,它显示错误的答案,而在自定义输入时,它显示正确的输出,有人可以指出我做错了什么吗?
可能是因为您使用的是 len(S) 而不是 N
可能是另一个问题。请记住,问题是“你能否在 K 步内将其转换为回文”,而不是“你能否在最少 K 步内将其转换为回文”。
如果您发现可以在少于 K 步的时间内完成,则必须弄清楚是否可以在 K 步内完成。对于偶数回文,您可以翻转位对,或者翻转相同的位偶数次。对于奇数回文,你可以把中心位翻来覆去。
#include
使用命名空间标准;
int main(){
int t,n,k,i,j,c;
cin>>t;
while(t--){
cin>>n>>k;
char str[n];
for( i=1;i<=n;i++){
cin>>str[i];
}
str[0]=i;
str[n-1]=j;
while(i<=j){
if(str[i++]!=str[j--]){
c--;
}
}
if(c=k){
cout<<"YES"<<endl;
}
else{
cout<<"NO"<<endl;
}
}
return 0;
}
问题陈述: 给你一个二进制字符串 S 和一个整数 K。在一个操作中,你可以选择任何位并将其翻转,即将 0 变为 1 或将 1 变为 0。你可以使用恰好 K 操作使字符串 S 成为回文吗?
如果可能就打印 YES,否则打印 NO。
输入格式 输入的第一行包含一个整数T,表示测试用例的数量。 T 测试用例的描述如下。 每个测试用例由两行输入组成。 每个测试用例的第一行包含两个 space 分隔的整数 N 和 K,表示二进制字符串的长度和要执行的操作数。 第二行包含二进制字符串 S。 输出格式 对于每个测试用例,在新行上打印答案——如果 S 可以使用恰好 K 次操作成为回文,则为 YES,否则为 NO。
YES 和 NO 的每个字符都可以大写或小写打印(例如,yes、yEs、Yes 都将被视为相同)。
我的解决方案:
T = int(input())
for i in range(T):
N,K = map(int,input().split())
S = input()
counter = 0
for i in range(int(len(S)/2)):
if S[i] == S[-1-i]:
continue
else:
counter = counter + 1
if counter == K:
print("Yes")
else:
print("No")
但是在提交时,它显示错误的答案,而在自定义输入时,它显示正确的输出,有人可以指出我做错了什么吗?
可能是因为您使用的是 len(S) 而不是 N
可能是另一个问题。请记住,问题是“你能否在 K 步内将其转换为回文”,而不是“你能否在最少 K 步内将其转换为回文”。
如果您发现可以在少于 K 步的时间内完成,则必须弄清楚是否可以在 K 步内完成。对于偶数回文,您可以翻转位对,或者翻转相同的位偶数次。对于奇数回文,你可以把中心位翻来覆去。
#include
int main(){
int t,n,k,i,j,c;
cin>>t;
while(t--){
cin>>n>>k;
char str[n];
for( i=1;i<=n;i++){
cin>>str[i];
}
str[0]=i;
str[n-1]=j;
while(i<=j){
if(str[i++]!=str[j--]){
c--;
}
}
if(c=k){
cout<<"YES"<<endl;
}
else{
cout<<"NO"<<endl;
}
}
return 0;
}