1 条题解
-
0
自动搬运
来自洛谷,原作者为

Genshin_ZFYX
.搬运于
2025-08-24 22:57:03,当前版本为作者最后更新于2024-04-09 20:57:05,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
前言
这题代码操作并不难,但思维难度是有的,连我也去评论区看了看别人的思路才做出来的。
解题思路
首先,我们可以先证明一个很重要的结论:
假设有一个序列 :
我们把除了 以外的所有数都乘 :
我们再拿原来的 ,把这里 除以 :
我们会发现,虽然值不同,但是每个数之间的倍数关系是不变的!这就跟老师给全班同学发了了一台电脑(
怎么可能),唯独你没有被发到。这个例子和老师到你家去抢了一台电脑一样,每名同学间电脑的数量差一样的(其实就是等式的性质,只不过有多个数)。所以说,把一个长度为 的序列中 个数的值乘一个相同的数,等于拿剩下的那个数除以这个相同的数。
我们不难想到,当所有 的值相同时,我们可以把 个数都乘一遍,而且只用操作一次。
而 的值并不完全相同时,我们进行 次操作,每次操作把第 个数 除以它自己,就可以最后变成一个每项都为 的序列了。
结论: 相同时,答案为 ,否则为 。
AC 代码:
#include<bits/stdc++.h> using namespace std; //#define int long long #define I return #define love 0 #define FIRESTARS ; int a[10005]; signed main() { cin.tie(0)->sync_with_stdio(0); int t,n,f=1;cin>>t; while(t--) { f=1; cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=2;i<=n;i++) if(a[i]!=a[i-1]) { f=0; break; } cout<<(f?n:n-1)<<'\n'; } I love FIRESTARS }
- 1
信息
- ID
- 9985
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者