CF1392A 题解

题目翻译

t t t组询问,每次给出一个长度为 n n n 的序列 a a a,对于两个相邻的且不相同的数,你可以将他们合并起来,即将这两个数替换成它们的和。

注意到,你每次进行一次操作后,序列长度会 − 1 −1 1,现在你可以随意进行若干次操作,问最后序列长度最短是多少。

算法讲解

  1. 如果所有数字都一样那么就不能合并,输出n;
  2. 如果最大数字只有一个,那么从最大的开始合并。合并完毕后,他还是最大的所以一定可以合并成只有1个数了;
  3. 如果最大数字不止一个,和第2种一样可以处理
  4. 如果有其他数据可以H***(被和谐了)请评论或私信

代码

#include <bits/stdc++.h>
using namespace std;
int T,N,a[1000039];
int main (){
	scanf("%d",&T);
	while(T--){
	    scanf("%d",&N);
	    for(int i=1;i<=N;i++)scanf("%d",&a[i]);
	    sort(a+1,a+1+N);
	    if(a[1]==a[N])printf("%d\n",N);
	    else printf("%d\n",1);
	}
	return 0;
}//14行不压行代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值