A Favorite Sequence
800分的题,根据题意发现这个序列是左一个右一个放的,所以还原的时候只需要左一个右一个拿回来就可以了
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
void solve()
{
vector<int>v;
int n;
cin >> n ;
for (int i = 1; i <= n; i ++ )
{
int x;
cin >> x;
v.push_back(x);
}
vector<int>ans;
for (int i = 0, j = n - 1; i <= j;)
{
ans.push_back(v[i ++ ]);
if (i < j)ans.push_back(v[j -- ]);
}
for (int i = 0; i < ans.size(); i ++ )
{
cout << ans[i] << " \n"[i == ans.size() - 1];
}
}
signed main()
{
int _ = 1;
cin >> _;
while ( _-- )solve();
}
B. Last Year’s Substring
800分,题意要求在序列中删掉一块得到 “2020” ,因此可以特判 左边不取,右边全取,左边取一个 右边取三个…以此类推,有符合条件的就可以了
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
void solve()
{
int n;
string a;
cin >> n >> a;
for (int i = 0; i <= 4; i ++ )
{
if (a.substr(0, i) + a.substr(n - (4 - i), 4 - i) == "2020") return void(puts("YES"));
}
return void(puts("NO"));
}
signed main()
{
int _ = 1;
cin >> _;
while ( _-- )solve();
}
C Unique Number
900
题目大意 给定一个数 问这个数能否求得一个数 使得 这个数每一位的和恰好等于这个数 如 给15 可以得到 78, 69,87,96,960等等,要求每位必须不一样,如果有则输出最小的
可以通过预处理得到所有每一位的排列 一共是 2 10 2^{10} 210种,存下对应的最小值(可以用string排序省事)
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
map<int,string>mp;
void solve()
{
int x;
cin >> x;
if (!mp.count(x)) return void