“达梦杯”武汉理工大学第五届新生程序设计大赛(I-优雅太优雅了)【数学、思维】

链接
理论基础
结论只需证明 ∀ i ∈ [ 2 , n − 1 ] ,满足 a [ i ] ⩽ g c d ( a [ i − 1 ] , a [ i + 1 ] ) 结论只需证明\forall i\in[2,n-1],满足a[i]\leqslant gcd(a[i-1],a[i+1]) 结论只需证明i[2,n1],满足a[i]gcd(a[i1],a[i+1])
首先 ∀ [ l , r ] , m i n ( a [ l ] , a [ l + 1 ] , ⋅ ⋅ ⋅ , a [ r ] ) ⩾ g c d ( a [ l ] , a [ l + 1 ] , ⋅ ⋅ ⋅ , a [ r ] ) 成立 首先\forall[l,r],min(a[l],a[l+1],···,a[r])\geqslant gcd(a[l],a[l+1],···,a[r])成立 首先[l,r],min(a[l],a[l+1],⋅⋅⋅,a[r])gcd(a[l],a[l+1],⋅⋅⋅,a[r])成立
因为大的最小公倍数也不能超过区间最小值。
题目将不等式右侧的a[r]换成了a[r+1],这样交换后是如何变化的。
题目要求: 题目要求: 题目要求:
就是 ∀ [ l , r ] , m i n ( a [ l ] , a [ l + 1 ] , ⋅ ⋅ ⋅ , a [ r ] ) ⩾ g c d ( a [ l ] , a [ l + 1 ] , ⋅ ⋅ ⋅ a [ r − 1 ] , a [ r + 1 ] ) 就是\forall[l,r],min(a[l],a[l+1],···,a[r])\geqslant gcd(a[l],a[l+1],···a[r-1],a[r+1]) 就是[l,r],min(a[l],a[l+1],⋅⋅⋅,a[r])gcd(a[l],a[l+1],⋅⋅⋅a[r1],a[r+1])
首先 ∀ [ l , r ] , m i n ( a [ l ] , ⋅ ⋅ ⋅ a [ r − 1 ] , a [ r + 1 ] ) ⩾ g c d ( a [ l ] , ⋅ ⋅ ⋅ , a [ r − 1 ] , a [ r + 1 ] ) 首先\forall[l,r],min(a[l],···a[r-1],a[r+1])\geqslant gcd(a[l],···,a[r-1],a[r+1]) 首先[l,r],min(a[l],⋅⋅⋅a[r1],a[r+1])gcd(a[l],⋅⋅⋅,a[r1],a[r+1])
如果说最小值在[l,r-1]处取到的话,两式左侧均相同,成立。
如果说最小值在r+1处取到,下面左侧的较小,也成立
只需考虑在r处取到最小值的情况,不等式便化为
∀ [ l , r ] , a [ r ] ⩾ g c d ( a [ l ] , a [ l + 1 ] , ⋅ ⋅ ⋅ , a [ r + 1 ] ) \forall[l,r],a[r]\geqslant gcd(a[l],a[l+1],···,a[r+1]) [l,r],a[r]gcd(a[l],a[l+1],⋅⋅⋅,a[r+1])
l 最接近 r 的时候右侧取到最大包含的数最少 g c d ( a [ r − 1 ] , a [ r + 1 ] ) l最接近r的时候右侧取到最大包含的数最少gcd(a[r-1],a[r+1]) l最接近r的时候右侧取到最大包含的数最少gcd(a[r1],a[r+1])
只需证明 ∀ r , a [ r ] ⩾ g c d ( a [ r − 1 ] , a [ r + 1 ] ) 只需证明\forall r,a[r]\geqslant gcd(a[r - 1],a[r+1]) 只需证明r,a[r]gcd(a[r1],a[r+1])
证毕 证毕 证毕
实现

#include <bits/stdc++.h>
#define ll long long
#define ls (p << 1)
#define rs (p << 1 | 1)
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
using namespace std;
typedef pair<int, int> PII;
const int N = 2e5 + 5, p = 998244353;
int a[N];
void solve() {
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> a[i];
	for (int i = 2; i <= n - 1; i++) {
		if (a[i] < __gcd(a[i - 1], a[i + 1])) {
			cout << "Rude\n";
            return;
		}	
	}
    cout << "Elegant\n";
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T = 1;
//	cin >> T;
	while (T--) solve();
	return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值