专栏文章
题解:P14453 [ICPC 2025 Xi'an R] Grand Voting
算法·理论参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mina1zws
- 此快照首次捕获于
- 2025/12/01 23:01 3 个月前
- 此快照最后确认于
- 2025/12/01 23:01 3 个月前
题意
有一个变量 ,初始为 。现在有 个数字,每个数字可以对 做出如下变化:
- 如果 不比当前判断数字小, 加 ;
- 否则, 减 。
找出 经过 次变化以后的最大值和最小值。
思路
看起来挺复杂的,但当我们看完样例以后发现,这种方案其实就是需要进行排序。样例还怕我们想复杂,特意加了最后一句的方法。
代码
CPP#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5 ; //n 很大,所以定义一个常数变量。
int n , a[N] ;
long long s;
//最坏情况为 10 的 5 次方乘上 10 的 5 次方,为 10 的 10 次方,需要开 long long。
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
//处理输入。
cin >> n ;
for(int i = 1 ; i <= n ; i++) cin >> a[i] ;
//进行排序。
sort(a + 1 , a + 1 + n);
//求出最大值。
for(int i = 1 ; i <= n ; i++){
if(s >= a[i]) s++;
else s--;
}
cout << s << " " ;
s = 0 ;
//求出最小值。
for(int i = n ; i > 0 ; i--){
if(s >= a[i]) s++;
else s--;
}
cout << s << endl ;
return 0;
}
如果您喜欢这篇题解,麻烦您点个赞,使这篇题解排名上升,谢谢!
(被打回)
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...