小红的字符串构造和小红的排列构造

简介: 小红的字符串构造和小红的排列构造

小红的字符串构造

小红希望你构造一个长度为nnn的、仅包含小写字母的字符串,其中恰好有kkk个长度大于1的回文子串。你能帮帮她吗?输入两个整数n,k,用空格隔开。 1≤n≤10^5,0≤k≤n/2.一个字符串。如果有多解输出任意即可。 可以证明,一定存在至少一个合法解。

#include<iostream>
#include<string.h>
using namespace std;
const int N = 1e6+6;
typedef long long ll;
ll n , k;
string s;
int main()
{
  cin >> n >> k;
    char c = 'a';
    for(int i=0;i<k;i++)
    {
        s += c;
        s += c;
        c ++;
        if(c > 'z') c = 'a';
    }
    while(s.size() < n)
    {
        s += c;
        c ++;
        if(c > 'z') c = 'a';
    }
    cout << s;
    return 0;
}

小红的排列构造

定义两个数组a和b的汉明距离为:有多少个下标iii满足ai≠bi。例如,[2,3,1]和[1,3,1]的汉明距离是1。现在小红拿到了一个长度为n的排列p,她希望你构造一个长度为n的排列q,满足p和q的汉明距离恰好等于k。排列指长度为n的数组,其中1到n每个元素恰好出现了一次。第一行输入两个正整数n,k,代表排列p的长度,以及构造后的q和p的汉明距离。 第二行输入n个正整数pi,代表小红拿到的排列。 1≤n,k≤10^5,1≤ai≤n;如果无解,请输出-1。 否则输出n个正整数qi,代表小红构造的排列。

#include<iostream>
using namespace std;
const int N=1e5+5;
typedef long long ll;
int a[N];
int main()
{
  int n,k;
  cin>>n>>k;
  for(int i=0;i<n;i++){
    cin>>a[i];
  }
  if(k>n||k==1)
        cout<<"-1\n";
  else{
    for(int i=0;i<k-1;i+=2){
      swap(a[i],a[i+1]);
    }
    if(k%2) 
            swap(a[k-1],a[0]);
    for(int i=0;i<n;i++){
      cout<<a[i]<<" \n"[i==n-1];
    }
  }
  return 0;
}

执行交换操作

for(int i=0;i<k-1;i+=2){
swap(a[i],a[i+1]);
}
if(k%2)
swap(a[k-1],a[0]);

对于 k 的每个偶数索引(从0开始),与其下一个索引(即奇数索引)进行交换。例如,如果 k=4,则交换 a[0]a[1],然后交换 a[2]a[3]

如果 k 是奇数,则额外交换 a[k-1]a[0]

目录
相关文章
|
2月前
去除数组重复成员的方法
去除数组重复成员的方法
28 2
|
5月前
|
存储 人工智能 BI
小红的排列构造(dp优化)
小红的排列构造(dp优化)
41 0
|
5月前
|
存储 C++ 容器
Map容器-构造和赋值讲解
Map容器-构造和赋值讲解
48 0
|
存储 索引
数组与字符串的关系【了解一下】
数组与字符串的关系【了解一下】
114 0
数组的三种声明方式,以及数组倒置
数组的三种声明方式,以及数组倒置
61 0
类数组如何转换为数组
类数组如何转换为数组
77 0
求字符串的长度(4种写法)(普通写法,函数写法(两种:有无返回值),不允许创建临时变量法(递归))
求字符串的长度(4种写法)(普通写法,函数写法(两种:有无返回值),不允许创建临时变量法(递归))
141 0
求字符串的长度(4种写法)(普通写法,函数写法(两种:有无返回值),不允许创建临时变量法(递归))
|
编译器 C++
C++类对象构造顺序
C++类对象构造顺序
53 0
C++类对象构造顺序
|
Java C++
数组的一些简单例子
当我们使用 arraycopy( ) 方法的时候,我们不但可以将原先的数组拷贝到一个新数组中去,也可以将原先的数组拷贝到原先的数组中。上述这个思想可以应用到数据结构的顺序表中的中间插入操作。
104 0
数组的一些简单例子