2023牛客寒假算法基础集训营3 - A C D F
A 不断减损的时间
思路
要使得整体和最小,就需要尽可能多的利用操作是的正的偶数一直除 2 变成奇数即可
C 忽远忽近的距离
思路
需满足对于所有的 i,\(2 \le |a_i - i| \le 3\)
则考虑循环节
- 当 \(n < 4 || n = 7\) 时,无解
- 剩下的当 \(n\) 为偶数时,考虑到长度为 4 的区间 \([i, i + 3]\) 可以输出 "i + 1 i + 2 i - 2 i - 1";长度为 6 的区间 \([i, i + 5]\) 可以输出 "i + 3 i + 4 i + 5 i - 3 i - 2 i - 1"
- 剩下的奇数,可以先预处理前 5 个数字,比如说输出 "4 5 1 2 3",后面即可利用上面偶数的规律补全即可
代码
void solve(){
int n;
cin >> n;
if(n <= 3 || n == 7) cout << -1;
else if(n % 2){
cout << "4 5 1 2 3 ";
for(int i = 6; i <= n; i += 4){
if(n - i + 1 == 6){
cout << i + 3 << ' ' << i + 4 << ' ' << i + 5 << ' ' << i << ' ' << i + 1 << ' ' << i + 2 << ' ';
break;
}else{
cout << i + 2 << ' ' << i + 3 << ' ' << i << ' ' << i + 1 << ' ';
}
}
}else if(n % 2 == 0){
for(int i = 1; i <= n; i += 4){
if(n - i + 1 == 6){
cout << i + 3 << ' ' << i + 4 << ' ' << i + 5 << ' ' << i << ' ' << i + 1 << ' ' << i + 2 << ' ';
break;
}else{
cout << i + 2 << ' ' << i + 3 << ' ' << i << ' ' << i + 1 << ' ';
}
}
}
return ;
}
D 宿命之间的对决
结论题:n为偶数必胜态,n为奇数必败态
原因:一个偶数减去因子,可以变成奇数或者偶数;一个奇数减去因子,只能变成偶数。又已知博弈选手足够聪明且1为最终必败态,故有上述结论。
代码:
//>>>Qiansui
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define mem(x,y) memset(x,y,sizeof(x))
//#define int long long
inline ll read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
using namespace std;
const int maxm=2e5+5,inf=0x3f3f3f3f;
void solve(){
ll n;
cin>>n;
if(n%2==0) cout<<"kou\n";
else cout<<"yukari\n";
return ;
}
/*
偶数总可以变成奇数
而奇数只能变成偶数
1为最终的必败态
故n为偶数必胜态
n为奇数必败态
*/
signed main(){
// ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int _=1;
// cin>>_;
while(_--){
solve();
}
return 0;
}
F 迎接终结的寂灭
42 是宇宙的答案
本文来自博客园,作者:Qiansui,转载请注明原文链接:https://www.cnblogs.com/Qiansui/p/17063384.html