题意:给定一个字符串,每个字符串的字符可以出现两次,要求通过重新排列构造一个回文串。
思路:直接暴力可以,每个字符头部一个尾部一个。
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #define sc_int(x) scanf("%d", &x)
- #define sc_ll(x) scanf("%lld", &x)
- #define pr_ll(x) printf("%lld", x)
- #define pr_ll_n(x) printf("%lld\n", x)
- #define pr_int_n(x) printf("%d\n", x)
- #define ll long long
- using namespace std;
-
- const int N=1000000+100;
- int n ,m,h;
- char s[N];
-
-
-
- int main()
- {
- int t;
- sc_int(t);
- while(t--)
- {
- cin>>s+1;
- int n=strlen(s+1);
- for(int i=1;i<=n;i++)
- {
- s[2*n-i+1]=s[i];
- }
- for(int i =1;i<=2*n;i++)
- cout<
- cout<
- }
- return 0;
- }
B:XOR = Average
题意:让你构造一个长度为 n 的数组,使得数组的平均值等于数组的异或和。
思路:由奇数得可以全部都为相同的数,如果是偶数,那么可以数组的平均数都是2,然后第一个2-1放到最后一个2的位置,这样中间的xor都是0,最后的异或的结果也是2,
-
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #define sc_int(x) scanf("%d", &x)
- #define sc_ll(x) scanf("%lld", &x)
- #define pr_ll(x) printf("%lld", x)
- #define pr_ll_n(x) printf("%lld\n", x)
- #define pr_int_n(x) printf("%d\n", x)
- #define ll long long
- using namespace std;
-
- const int N=1000000+100;
- int n ,m,h;
- ll s[N];
-
-
-
- int main()
- {
- int t;
- sc_int(t);
- while(t--)
- {
- ll res=0;
- cin>>n;
- if(n%2!=0)
- {
- for(int i =1;i<=n;i++)
- cout<
" "; - }
- else
- {
- cout<<1<<" ";
- for(int i =2;i
- cout<<2<<" ";
- }
- cout<<3<<" ";
- }
- cout<
- }
-
- return 0;
- }
C: Almost All Multiples
题意:给你一个x和n,让你构造一个长度为n的数组并且第一个数是x最后一个是1并且数组的每一位要保证能够取余i。并且构造这个字典序最小的数组,如果没有就输出-1.
思路:首先如果x " role="presentation">,那么在除了x和1之外的每个元素都不能让位置给n,那么一定就构造不了。
否则可以构造一个数组,就是x和n的位置互换的情况,然后要考虑最小的字典序的情况,即n的位置尽可能的跟后面的数字交换(要换的数能整除当前n的下标并且n能整除要换的数的下标),直接暴力搜一遍就可以了。
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #define sc_int(x) scanf("%d", &x)
- #define sc_ll(x) scanf("%lld", &x)
- #define pr_ll(x) printf("%lld", x)
- #define pr_ll_n(x) printf("%lld\n", x)
- #define pr_int_n(x) printf("%d\n", x)
- #define ll long long
- using namespace std;
-
- const int N=1000000+100;
- int n ,m,h;
- ll s[N];
-
-
-
- int main()
- {
- int t;
- sc_int(t);
- while(t--)
- {
- sc_int(n),sc_int(m);
- if(n%m!=0){
- cout<<-1<
- continue;
- }
- else
- for(int i =1;i<=n;i++)
- {
- if(i==1)s[i]=m;
- else if(i==n)s[i]=1;
- else if(i==m)s[i]=n;
- else s[i]=i;
- }
- int l=m,lx=s[l];
- for(int i =m+1;i<=n;i++)
- {
- if(s[i]%l==0&&lx%i==0)
- {
- swap(s[i],s[l]);
- l=i;
- }
- }
- for(int i =1;i<=n;i++)
- cout<
" "; - cout<
- }
-
- return 0;
- }
D题自己写出来了但是思路不好说,因为我自己是打表找出来的规律(欸嘿~),感觉这次的构造题都挺考验打表的,以后还是继续努力吧!
-
相关阅读:
基于量子随机游走的图像加密算法
centos docker下安装Minio服务
B3627 立方根
flink中cpu消耗的大户-序列化和反序列化
NIO Selector选择器
矩阵相乘详解
如何从 Mac Studio 恢复丢失的数据?以下是 4 种 Mac Studio 恢复方法
微信小程序带来了新的创业机会?
ESP32(基于Arduino)连接EMQX的Mqtt服务器上传信息与命令控制
【MedusaSTears】正则表达式搜索心得
-
原文地址:https://blog.csdn.net/jikelk/article/details/128055700