結果
| 問題 | No.1884 Sequence | 
| コンテスト | |
| ユーザー |  publfl | 
| 提出日時 | 2022-03-25 21:31:19 | 
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 59 ms / 2,000 ms | 
| コード長 | 842 bytes | 
| コンパイル時間 | 503 ms | 
| コンパイル使用メモリ | 55,668 KB | 
| 実行使用メモリ | 6,820 KB | 
| 最終ジャッジ日時 | 2024-10-14 05:22:39 | 
| 合計ジャッジ時間 | 3,422 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 40 | 
ソースコード
#include <stdio.h>
#include <vector>
#include <algorithm>
long long int gcd(long long int a, long long int b)
{
	return a?gcd(b%a,a):b;
}
std::vector<long long int> V;
int main()
{
	int a;
	scanf("%d",&a);
	int count = 0;
	for(int i=1;i<=a;i++)
	{
		long long int b;
		scanf("%lld",&b);
		if(b==0) count++;
		else V.push_back(b);
	}
	std::sort(V.begin(),V.end());
	if(V.size()<=1) printf("Yes");
	else
	{
		int control1 = 0, control2 = 0;
		for(int i=1;i<V.size();i++)
		{
			if(V[i]==V[i-1]) control1 = 1;
			else control2 = 1;
		}
		if(control1==1)
		{
			if(control2==1) printf("No");
			else printf("Yes");
			return 0;
		}
		
		long long int g = 0;
		long long int C = 0;
		for(int i=1;i<V.size();i++) g = gcd(g,V[i]-V[i-1]);
		for(int i=1;i<V.size();i++) C += (V[i]-V[i-1]-1)/g;
		if(C<=count) printf("Yes");
		else printf("No");
	}
}
            
            
            
        