给定一个整数N和一个最初由4*N个0组成的二进制字符串,任务是翻转字符,使得由1组成的字符串的任何两对索引既不是互质也不是这对索引可以可以相互分割。
注意:考虑基于 1 的索引。
例子:
Input: N = 3, S = “000000000000”
Output: 000000010101
Explanation: In the modified string “000000010101”, the indices of 1s are {8, 10, 12}. In the above set of indices, there does not exist any pair of indices that are co-prime and divisible by each other.
Input: N = 2, S = “00000000”
Output: 00000101
方法:根据观察结果可以解决给定的问题,如果字符在位置4*N, 4*N – 2, 4*N – 4, … up to N terms处翻转,则不存在任何字符一对可被彼此整除且 GCD 为1的索引。
下面是上述方法的实现:
C++
#include
using namespace std;
// Function to modify a string such
// that there doesn't exist any pair
// of indices consisting of 1s, whose
// GCD is 1 and are divisible by each other
void findString(char S[], int N)
{
int strLen = 4 * N;
// Flips characters at indices
// 4N, 4N - 2, 4N - 4 .... upto N terms
for (int i = 1; i <= N; i++) {
S[strLen - 1] = '1';
strLen -= 2;
}
// Print the string
for (int i = 0; i < 4 * N; i++) {
cout << S[i];
}
}
// Driver code
int main()
{
int N = 2;
char S[4 * N];
// Initialize the string S
for (int i = 0; i < 4 * N; i++)
S[i] = '0';
// function call
findString(S, N);
return 0;
}
// This code is contributed by aditya7409.
Java
// Java program for the above approach
import java.io.*;
class GFG {
// Function to modify a string such
// that there doesn't exist any pair
// of indices consisting of 1s, whose
// GCD is 1 and are divisible by each other
public static void findString(char S[], int N)
{
int strLen = 4 * N;
// Flips characters at indices
// 4N, 4N - 2, 4N - 4 .... upto N terms
for (int i = 1; i <= N; i++) {
S[strLen - 1] = '1';
strLen -= 2;
}
// Print the string
System.out.println(S);
}
// Driver Code
public static void main(String[] args)
{
int N = 2;
char S[] = new char[4 * N];
// Initialize the string S
for (int i = 0; i < 4 * N; i++)
S[i] = '0';
findString(S, N);
}
}
Python3
# Python3 program for the above approach
# Function to modify a string such
# that there doesn't exist any pair
# of indices consisting of 1s, whose
# GCD is 1 and are divisible by each other
def findString(S, N) :
strLen = 4 * N
# Flips characters at indices
# 4N, 4N - 2, 4N - 4 .... upto N terms
for i in range(1, N + 1):
S[strLen - 1] = '1'
strLen -= 2
# Print the string
for i in range(4 * N):
print(S[i], end = "")
# Driver code
N = 2
S = [0] * (4 * N)
# Initialize the string S
for i in range(4 * N):
S[i] = '0'
# function call
findString(S, N)
# This code is contributed by sanjoy_62.
C#
// C# program to implement
// the above approach
using System;
public class GFG
{
// Function to modify a string such
// that there doesn't exist any pair
// of indices consisting of 1s, whose
// GCD is 1 and are divisible by each other
public static void findString(char[] S, int N)
{
int strLen = 4 * N;
// Flips characters at indices
// 4N, 4N - 2, 4N - 4 .... upto N terms
for (int i = 1; i <= N; i++) {
S[strLen - 1] = '1';
strLen -= 2;
}
// Print the string
Console.WriteLine(S);
}
// Driver Code
public static void Main(String[] args)
{
int N = 2;
char[] S = new char[4 * N];
// Initialize the string S
for (int i = 0; i < 4 * N; i++)
S[i] = '0';
findString(S, N);
}
}
// This code is contributed by souravghosh0416.
Javascript
输出:
00000101
时间复杂度: O(N)
辅助空间: O(1)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live