首页 > 小红的排列构造②
头像 _KOKORO_
发表于 2025-04-10 12:31:27
思路就是维护一个全局数字 k 初始为 1。遇到字符串里有 '1' 就倒序遍历填充并让 k++如 00101, 第一次遇到 '1' 答案数组变成 3 2 1 0 0, 第二次遇到 '1' 变成 3 2 1 5 4 import java.util.Scanner; // 注意类名必须为 Main, 展开全文
头像 牛客856751393号
发表于 2025-03-07 11:45:27
while True: try: n = int(input()) s = input() if s[-1] == '0': print(-1) else: res = [i fo 展开全文
头像 在写文章的小白菜很犯困
发表于 2025-06-02 20:58:11
观察到以下规律:如果[1, 2, ... , n]的第k<n位和最后一位交换,那么[0,n)依旧是一个排列,而[0,k]不是一个排列。所以算法如下:从1 2 3 4 5 ... n开始对每个'0'的位置 i,总是找其后面的第一个'1'位置 j,交换perm[i],perm[j]。 #inclu 展开全文
头像 RogeAustine
发表于 2026-01-11 02:06:37
只需要先生成一个正序排列,然后在每次遇到'0'时,将当前位置数字与后面那个交换位置即可,特判末尾有0,因为到最后一定包含了从1到n的所有数字。 #include <vector> #include <string> #include <iostream> #inc 展开全文
头像 番禺小韭菜
发表于 2025-03-04 16:47:05
#include <iostream> #include <string> #include <vector> using namespace std; int main() { int n; string s; cin >> 展开全文
头像 rpcwx
发表于 2026-02-22 12:32:52
#include <iostream> using namespace std; #include<string> #include<vector> #include<algorithm> #include<stack> int main 展开全文
头像 bbl0705
发表于 2026-01-05 21:46:54
n = int(input()) a = input() z = 1 c = 0 y = 0 if a[-1] == '0': print('-1') exit() for i in a: if i == '1': if y == 0: 展开全文
头像 BraveCoder
发表于 2025-10-16 19:56:28
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n 展开全文
头像 牛客215801247号
发表于 2025-03-06 23:22:07
import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in. 展开全文
头像 吴昊9873
发表于 2025-05-05 14:06:41
#include <stdio.h> int main() { int n; scanf("%d", &n); char str[n]; int arr[n]; for (int i = 0; i < n; i+ 展开全文