亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

2023-07-31:用r、e、d三種字符,拼出一個回文子串數量等于x的字符串

2023-08-01 13:08:20
12
0

2023-07-31:用r、e、d三種字符,拼出一個回文子串數量等于x的字符串。

1 <= x <= 10^5。

來自百度。

答案2023-07-31:

大體步驟如下:

1.初始化一個字符串`builder`,用于構建結果字符串。

2.初始化一個字符變量`cur`,初始值為'r',用于輪流使用字符'r'、'e'和'd'構建回文串。

3.進入循環,直到輸入的整數x變為0。

4.在循環中,使用`near`函數找到最接近x且滿足條件的數值number。

   - `near`函數采用二分法搜索,從1開始逐漸增加m的值,直到找到滿足條件的m值。

   - 滿足條件是通過`ok`函數判斷,即判斷n乘以n+1再除以2是否小于等于x。

   - 將滿足條件的m值賦給ans,并繼續搜索更大的m值。

5.對于當前找到的number,使用循環將字符cur添加到字符串builder中,重復number次。

6.計算處理完當前的number后,需要減去的值,即number乘以(number+1)再除以2,記為delta。

7.將delta從x中減去。

8.根據當前的cur字符,順序更新cur為下一個字符。

   - 如果cur是'r',則更新為'e'。

   - 如果cur是'e',則更新為'd'。

   - 如果cur是'd',則更新為'r'。注意,這是一個循環的過程。

9.返回構建好的字符串builder。

總時間復雜度為O(x * log(x)),總空間復雜度為O(1),其中x是輸入的值。

# go完整代碼如下:

```go
package main

import (
    "fmt"
)

func palindromeX(x int) string {
    builder := ""
    cur := 'r'
    for x > 0 {
        number := near(x)
        for i := 0; i < number; i++ {
            builder += string(cur)
        }
        x -= number * (number + 1) / 2
        if cur == 'r' {
            cur = 'e'
        } else if cur == 'e' {
            cur = 'd'
        } else {
            cur = 'r'
        }
    }
    return builder
}

func near(x int) int {
    l := 1
    r := x
    m, ans := 0, 0
    for l <= r {
        m = (l + r) / 2
        if ok(m, x) {
            ans = m
            l = m + 1
        } else {
            r = m - 1
        }
    }
    return ans
}

func ok(n, x int) bool {
    return int64(n*(n+1)/2) <= int64(x)
}

func main() {
    x := 13
    fmt.Println(palindromeX(x))
}
```

![在這里插入圖片描述](//img-blog.csdnimg.cn/01630b71788f43ac968e4817109b0144.png)

# rust完整代碼如下:

```rust
fn palindrome_x(x: i32) -> String {
    let mut builder = String::new();
    let mut cur = 'r';
    let mut x = x;

    while x > 0 {
        let number = near(x);
        for _ in 0..number {
            builder.push(cur);
        }
        x -= number * (number + 1) / 2;
        cur = match cur {
            'r' => 'e',
            'e' => 'd',
            _ => 'r',
        };
    }

    builder
}

fn near(x: i32) -> i32 {
    let mut l = 1;
    let mut r = x;
    let mut ans = 0;

    while l <= r {
        let m = (l + r) / 2;
        if ok(m, x) {
            ans = m;
            l = m + 1;
        } else {
            r = m - 1;
        }
    }

    ans
}

fn ok(n: i32, x: i32) -> bool {
    (n * (n + 1) / 2) <= x
}

fn main() {
    let x = 13;
    println!("{}", palindrome_x(x));
}
```

![在這里插入圖片描述](//img-blog.csdnimg.cn/2d567f9366bd41d9a3cc177094be13e6.png)

# c++完整代碼如下:

```cpp
#include <iostream>
#include <string>

int near(int x);

std::string palindromeX(int x) {
    std::string result;
    char cur = 'r';
    while (x > 0) {
        int number = near(x);
        for (int i = 0; i < number; i++) {
            result += cur;
        }
        x -= number * (number + 1) / 2;
        cur = (cur == 'r') ? 'e' : (cur == 'e') ? 'd' : 'r';
    }
    return result;
}

bool ok(int n, int x);

int near(int x) {
    int l = 1;
    int r = x;
    int m, ans = 0;
    while (l <= r) {
        m = (l + r) / 2;
        if (ok(m, x)) {
            ans = m;
            l = m + 1;
        }
        else {
            r = m - 1;
        }
    }
    return ans;
}

bool ok(int n, int x) {
    return ((long long)n * (n + 1) / 2) <= x;
}

int main() {
    int x = 13;
    std::cout << palindromeX(x) << std::endl;
    return 0;
}
```

![在這里插入圖片描述](//img-blog.csdnimg.cn/713688e687b44508951a18a108ba6d91.png)

0條評論
0 / 1000
3****m
116文章數
2粉絲數
3****m
116 文章 | 2 粉絲
原創

2023-07-31:用r、e、d三種字符,拼出一個回文子串數量等于x的字符串

2023-08-01 13:08:20
12
0

2023-07-31:用r、e、d三種字符,拼出一個回文子串數量等于x的字符串。

1 <= x <= 10^5。

來自百度。

答案2023-07-31:

大體步驟如下:

1.初始化一個字符串`builder`,用于構建結果字符串。

2.初始化一個字符變量`cur`,初始值為'r',用于輪流使用字符'r'、'e'和'd'構建回文串。

3.進入循環,直到輸入的整數x變為0。

4.在循環中,使用`near`函數找到最接近x且滿足條件的數值number。

   - `near`函數采用二分法搜索,從1開始逐漸增加m的值,直到找到滿足條件的m值。

   - 滿足條件是通過`ok`函數判斷,即判斷n乘以n+1再除以2是否小于等于x。

   - 將滿足條件的m值賦給ans,并繼續搜索更大的m值。

5.對于當前找到的number,使用循環將字符cur添加到字符串builder中,重復number次。

6.計算處理完當前的number后,需要減去的值,即number乘以(number+1)再除以2,記為delta。

7.將delta從x中減去。

8.根據當前的cur字符,順序更新cur為下一個字符。

   - 如果cur是'r',則更新為'e'。

   - 如果cur是'e',則更新為'd'。

   - 如果cur是'd',則更新為'r'。注意,這是一個循環的過程。

9.返回構建好的字符串builder。

總時間復雜度為O(x * log(x)),總空間復雜度為O(1),其中x是輸入的值。

# go完整代碼如下:

```go
package main

import (
    "fmt"
)

func palindromeX(x int) string {
    builder := ""
    cur := 'r'
    for x > 0 {
        number := near(x)
        for i := 0; i < number; i++ {
            builder += string(cur)
        }
        x -= number * (number + 1) / 2
        if cur == 'r' {
            cur = 'e'
        } else if cur == 'e' {
            cur = 'd'
        } else {
            cur = 'r'
        }
    }
    return builder
}

func near(x int) int {
    l := 1
    r := x
    m, ans := 0, 0
    for l <= r {
        m = (l + r) / 2
        if ok(m, x) {
            ans = m
            l = m + 1
        } else {
            r = m - 1
        }
    }
    return ans
}

func ok(n, x int) bool {
    return int64(n*(n+1)/2) <= int64(x)
}

func main() {
    x := 13
    fmt.Println(palindromeX(x))
}
```

![在這里插入圖片描述](//img-blog.csdnimg.cn/01630b71788f43ac968e4817109b0144.png)

# rust完整代碼如下:

```rust
fn palindrome_x(x: i32) -> String {
    let mut builder = String::new();
    let mut cur = 'r';
    let mut x = x;

    while x > 0 {
        let number = near(x);
        for _ in 0..number {
            builder.push(cur);
        }
        x -= number * (number + 1) / 2;
        cur = match cur {
            'r' => 'e',
            'e' => 'd',
            _ => 'r',
        };
    }

    builder
}

fn near(x: i32) -> i32 {
    let mut l = 1;
    let mut r = x;
    let mut ans = 0;

    while l <= r {
        let m = (l + r) / 2;
        if ok(m, x) {
            ans = m;
            l = m + 1;
        } else {
            r = m - 1;
        }
    }

    ans
}

fn ok(n: i32, x: i32) -> bool {
    (n * (n + 1) / 2) <= x
}

fn main() {
    let x = 13;
    println!("{}", palindrome_x(x));
}
```

![在這里插入圖片描述](//img-blog.csdnimg.cn/2d567f9366bd41d9a3cc177094be13e6.png)

# c++完整代碼如下:

```cpp
#include <iostream>
#include <string>

int near(int x);

std::string palindromeX(int x) {
    std::string result;
    char cur = 'r';
    while (x > 0) {
        int number = near(x);
        for (int i = 0; i < number; i++) {
            result += cur;
        }
        x -= number * (number + 1) / 2;
        cur = (cur == 'r') ? 'e' : (cur == 'e') ? 'd' : 'r';
    }
    return result;
}

bool ok(int n, int x);

int near(int x) {
    int l = 1;
    int r = x;
    int m, ans = 0;
    while (l <= r) {
        m = (l + r) / 2;
        if (ok(m, x)) {
            ans = m;
            l = m + 1;
        }
        else {
            r = m - 1;
        }
    }
    return ans;
}

bool ok(int n, int x) {
    return ((long long)n * (n + 1) / 2) <= x;
}

int main() {
    int x = 13;
    std::cout << palindromeX(x) << std::endl;
    return 0;
}
```

![在這里插入圖片描述](//img-blog.csdnimg.cn/713688e687b44508951a18a108ba6d91.png)

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0