标签:说明 天都 ++ sdi dig 贪心 fine 数据说明 turn
T1 第一题(eat.cpp/c/pas)
贪心 排序 模拟
【问题描述】
凶猛的**出来吃人了!每天早晨,**从大山里出来,到达一个城市,然后花费一整天的时间把这座城市里的人吃光。直到夜晚,**才回到山中去。当**经过一个城市时,不管是否吃人,它都会把这座城市彻底破坏,以至于下次不能再到这个城市吃人了。显然,城市里的居民无法忍受这样的状况。所以,每天夜晚,每座城市里都会有一个人逃到乡下去,到了乡下以后**就永远吃不到他了。城市之间有一些双向道路连接着。其中 1 号城市连接着大山,即**每天的旅途的起点。当然,**只能沿着这些道路走。**意识到必须抓紧时间吃人,所以它每天都要认真选取要去的城市,当然它不能选择已经被吃过或破坏过的城市。现在问题来了,在所有城市没有人居住之前,**最多能吃掉多少人?
【输入】
输入文件名为 eat.in。
第一行两个整数??, ??,用一个空格隔开,表示城市的个数和道路数。
第二行??个整数????,表示每座城市初始的人数。两个数之间用一个空格隔开。
接下来??行,每行两个整数??, ??(1 ≤ ??, ?? ≤ ??, ?? ≠ ??),用一个空格隔开,表示城市??和城市??之间有一条双向道路。城市 1 和大山之间也有一条双向道路。
数据保证所有城市都存在到城市 1 的路径。
【输出】
输出文件名为 eat.out。
输出共一行一个整数,表示在所有城市没有人居住之前,**最多能吃掉的人数。
【输入输出样例】
eat.in
5 5
1 3 2 4 7
1 2
1 3
2 3
2 4
3 5
eat.out
11
【数据说明】
对于 10%的数据,1 ≤ ?? ≤ 5,0 ≤ ?? ≤ 10,0 ≤ ???? ≤ 5。
对于 30%的数据,1 ≤ ?? ≤ 200,0 ≤ ?? ≤ 500,0 ≤ ???? ≤ 200。
对于 60%的数据,1 ≤ ?? ≤ 2,000,0 ≤ ?? ≤ 10,000,0 ≤ ???? ≤ 20,000。
对于 100%的数据,1 ≤ ?? ≤ 200,000,0 ≤ ?? ≤ 2,000,000,0 ≤ ???? ≤ 2,000,000。
第 ?? 天到达某个城市时,人数减少 $\dfrac {k\left( k-1\right) }{2}$
1 #include<bits/stdc++.h>
2 #define ll long long
3 using namespace std;
4 inline int read()
5 {
6 int x=0;char c=getchar();
7 for(;!isdigit(c);c=getchar());
8 for(;isdigit(c);c=getchar()) x=x*10+c-‘0‘;
9 return x;
10 }
11 int n,m,a[200005];
12 ll ans=0,sum=0;
13 int main()
14 {
15 freopen("eat.in","r",stdin);
16 freopen("eat.out","w",stdout);
17 n=read();m=read();
18 for(int i=1;i<=n;i++)
19 a[i]=read();
20 sort(a+1,a+n+1);
21 for(int i=n;i;i--)
22 {
23 sum+=a[i];
24 ans=max(ans,sum-(ll)1*(n-i+1)*(n-i)/2);
25 }
26 cout<<ans<<endl;
27 return 0;
28 }
Test20200610
标签:说明 天都 ++ sdi dig 贪心 fine 数据说明 turn
原文地址:https://www.cnblogs.com/SuSuSOS/p/13088238.html