本文主要是介绍CF1450 D. Rating Compression(贪心+stl),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
链接 https://codeforces.com/contest/1450/problem/D
On the competitive programming platform CodeCook, every person has a rating graph described by an array of integers a of length n. You are now updating the infrastructure, so you’ve created a program to compress these graphs.
The program works as follows. Given an integer parameter k, the program takes the minimum of each contiguous subarray of length k in a.
More formally, for an array a of length n and an integer k, define the k-compression array of a as an array b of length n−k+1, such that
bj=minj≤i≤j+k−1ai
For example, the 3-compression array of [1,3,4,5,2] is [min{1,3,4},min{3,4,5},min{4,5,2}]=[1,3,2].
A permutation of length m is an array consisting of m distinct integers from 1 to m in arbitrary order. For example, [2,3,1,5,4] is a permutation, but [1,2,2] is not a permutation (2 appears twice in the array) and [1,3,4] is also not a permutation (m=3 but there is 4 in the array).
A k-compression array will make CodeCook users happy if it will be a permutation. Given an array a, determine for all 1≤k≤n if CodeCook users will be happy after a k-compression of this array or not.
Input
The first line contains a single integer t (1≤t≤104) — the number of test cases.
The first line of the description of each test case contains a single integer n (1≤n≤3⋅105) — the length of the array.
The second line of the description of each test case contains n integers a1,…,an (1≤ai≤n) — the elements of the array.
It is guaranteed, that the sum of n for all test cases does not exceed 3⋅105.
Output
For each test case, print a binary string of length n.
The k-th character of the string should be 1 if CodeCook users will be happy after a k-compression of the array a, and 0 otherwise.
Example
input
5
5
1 5 3 4 2
4
1 3 2 1
5
1 3 3 3 2
10
1 2 3 4 5 6 7 8 9 10
3
3 3 2
output
10111
0001
00111
1111111111
000
Note
In the first test case, a=[1,5,3,4,2].
The 1-compression of a is [1,5,3,4,2] and it is a permutation.
The 2-compression of a is [1,3,3,2] and it is not a permutation, since 3 appears twice.
The 3-compression of a is [1,3,2] and it is a permutation.
The 4-compression of a is [1,2] and it is a permutation.
The 5-compression of a is [1] and it is a permutation.
题意
给你一个长度为n的序列,可以有n次操作,第i次操作为把序列变成几个长度为i的子段,然后子段最小值构成一个新的序列,其中没有重复的且不超过这个序列长度的值出现,则为1,不然这次操作为0,输出n次操作后结果。
思路
长度为1到n数,我们要的是一个头或尾慢慢增大的一个序列,我们从1到n慢慢枚举就行,头尾特殊处理一下,只要有1出现,尾必然是1,只要没有重复数,头是1。
代码
#include <bits/stdc++.h>
typedef long long ll;
const ll mod = 1e9 +7;
using namespace std;
const int N = 2e3 + 5;
ll Case,n,x;
void solve(){scanf("%d",&n);vector<int> ans(n+5,0),vis(n+5,0);deque<int> zr;for(int i=1;i<=n;i++){scanf("%d",&x);zr.push_front(x);vis[x]++;}for(int i=1;i<=n;i++){if(vis[i]==0) break;ans[i]=1;if(vis[i]>1) break;if(zr.front()==i) zr.pop_front();else if(zr.back()==i) zr.pop_back();else break;}bool flag = true;for(int i=1;i<=n;i++) if(vis[i]!=1) flag = false;ans[n]=flag;for(int i=n;i>=1;i--) printf("%d",ans[i]);puts("");
}
int main(){Case=1;scanf("%d",&Case);while(Case--){solve();} return 0;
}
这篇关于CF1450 D. Rating Compression(贪心+stl)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!