传送门
题目描述
输入描述
输出描述
输入样例
3 2 4 3 7 2 6 4 2 3 11 2 1 7
输出样例
1 2 3
样例解释
签到题,轮换使用两把伤害最高的武器即可,为方便计算,可先将两把武器的伤害叠加取模。
特判余数与伤害最高的武器之间的关系即可。
参考代码
#includeusing namespace std; typedef long long ll; const int N=1010; int main(){ int t; cin>>t; while(t--){ ll n,h; ll a[N]; cin>>n>>h; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); if(a[n]>=h) cout<<"1"< =h) cout<<2*ans+1< B-Hemose Shopping 传送门
题目描述
输入描述
输出描述
输入样例
4 3 3 3 2 1 4 3 1 2 3 4 5 2 5 1 2 3 4 5 4 1 2 3 4 4输出样例
NO YES YES YES样例解释
题目大意: 对于一个数组(下标从 1 开始),可以任意交换两个下标之差不小于 x 的元素,问该数组是否可以通过有限次交换形成非下降序列。
对于所有样例,易得当 x = 1 时一定可以,而对于样例 1,可以模拟出若 x = 2,能够通过交换 1 和 3 满足题意,此时的 2 虽然不可移动(原因是它最近必须与下标为 0 或 4的元素互换,而该数组的有效下标为 1 - 3 ),但由于其恰好符合非下降序列时该位的值,因此符合要求。
可取样例 n = 5,x = 2,[ 5,1,2,3,4 ] 模拟,不难发现其中的任何一个数都能通过多次变换移动到任何位置,例 2 -> 4 -> 5 -> 3 -> 1 (此处均以原序列中的数字代替其下标)。而当 x = 3 时,2 将不可进行移动,5,1,3,4 仍可移动到这四个数字中的任何位置。当 x = 4 时,1,2,3 将不可进行移动。即对于每个数组,其不可移动区间为[ n - x + 1 , x ] 。
若某数组想满足非下降序列,则需其不可移动区间内的各个数字均与该数组 sort 后对应下标的值相同。
参考代码
#includeusing namespace std; typedef long long ll; const int N=1e5+10; int main(){ int t; cin>>t; while(t--){ int n,x,flag=1; int a[N],b[N]; cin>>n>>x; int y; for(int i=1;i<=n;i++){ cin>>y; a[i]=b[i]=y; } sort(b+1,b+n+1); for(int l=n-x+1;l<=x;l++){ if(a[l]==b[l]){ continue; } else{ cout<<"NO"<



