At grand 022 GCD序列构造 dp/floyd二进制变换最少费用
2024-09-03 03:22:24
A
diverse words指的是每一个字母在单词中出现的次数不超过1的单词
题目要求你求出字典序比当前给定单词大的字典序最小单词
1.如果给定的单词长度小于26 就遍历一次在单词尾部加上字典序最小的一个字母
2.如果单词的长度等于26 当且仅当单词为 zyxwvutsrqponmlkjihgfedcba 时没有答案 我们从最后一个字母开始消除如果到一个字母有比他大的就替换掉
#include <bits/stdc++.h>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define inf 1e9
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que; get min
const double eps = 1.0e-10;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
//const int maxn = 3e5 + 10;
const int maxn = ;
const int turn[][] = {{, }, { -, }, {, }, {, -}};
//priority_queue<int, vector<int>, less<int>> que;
//next_permutation
int zimu[];
int sum = ;
map<char, int> mp;
int main()
{
string now;
cin >> now;
string ans = "";
for (int i = ; i < now.size(); i++)
{
zimu[now[i] - 'a']++;
}
if (now.size() < )
{
cout << now;
for (int i = ; i <= ; i++)
{
if (!zimu[i])
{
cout << (char)('a' + i);
return ;
}
}
}
for (int i = now.size() - ; i >= ; i--)
{
int cnt = now[i] - 'a';
for (int j = cnt + ; j <= ; j++)
{
if (!zimu[j])
{
for (int k = ; k < i; k++)
{
cout << now[k];
}
cout << (char)('a' + j);
return ;
}
}
zimu[now[i] - 'a']--;
}
cout << - << endl;
}
B
要求你构造一个序列 序列总和与每一项的GCD不等于1 但总GCD为1 所有数不能超过300000
题目案例有提示 但是还是要你自己推 最后满足要求的只能是2,3两个数 2,3的LCM为6所以我们的序列总和一定要是6的倍数
我们把2的倍数三个为一组 这样就是6的倍数 3的倍数两个为一组 这样也是6的倍数
第一种情况:当N%3==0 即取2的倍数三个为一组可以全部取完的时候 去掉两组给3的倍数 这样才使总GCD为1
第二种情况:当N%3不为0 为2的时候 我们直接取一组3的倍数即可满足条件 为1的时候全部取3的倍数的话总和为6*N+3 我们需要消去这个3 需要再加一个3的倍数 又因为3的倍数是6*M+3 所以我们需要消去2的倍数里面的一个6的倍数
#include <bits/stdc++.h>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long ll;
int main()
{
int n;
cin >> n;
if (n == )
{
cout << "2 5 63" << endl;
return ;
}
if (n == )
{
cout << "2 4 6 12 3 9" << endl;
return ;
}
int two = n / ;
if (two > )
{
two = ;
}
else
{
if (n % == )
{
two -= ;
}
}
int number2 = two * - ((n - two * ) % == );
int number3 = n - number2;
for (int i = ; i <= number2; i++)
{
cout << * i << " ";
}
for (int i = ; i <= number3; i++)
{
cout << ( * i - ) * << " ";
}
cout << endl;
}
最新文章
- 用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树
- Thinking in java学习笔记之持有对象总结
- BZOJ 2654 &; 玄学二分+MST
- SSIS 包单元测试检查列表
- Java集合类: Set、List、Map、Queue使用场景梳理
- 队列——解密QQ号
- C++ 常用术语(后续补充)
- [转]ANDROID L——Material Design详解(动画篇)
- python eval
- 通过代理访问nginx和直接访问nginx区别
- Java代码输出是“father”还是“child”(一)
- 关键字-this
- python正则表达式--特殊字符
- C++的 new 和 detele
- EF6增改删等常用基类
- Spring Cloud(Dalston.SR5)--Eureka 注册中心高可用搭建
- MultiImageSelector 仿微信选择多张图片回调
- openshift harp.js heroku react-router 4
- python中range()、list()函数的用法
- 关于JSON基础的总结