题解 CF1151E 【Number of Components】
\[\huge\mathcal{Description}
\]
| 日期 | 2020年8月24日 |
|---|---|
| 编号 | \(\texttt{CF1151E}\) |
| 算法 | 数学 |
| 来源 | 无名小题 |
\[\huge\mathcal{Solution}
\]
简单题!
首先,我们需要将连通块个数转换成点数减边数
然后,我们考虑每一个点对答案的贡献。
第\(i\)个点,它被录用,当且仅当\(Left\)≤\(A_i\)&\(A_i\)≤\(Right\)
所以,第\(i\)个点对答案的贡献是\(A_i(N-A_i+1)\)
同理,我们可以算出每一条边的贡献。
减一减就好了呀!
\[\huge\mathcal{Code}
\]
#include<bits/stdc++.h>
using namespace std;
int TotalPoint;
int Array[100001];
int main(void)
{
register int i;
cin>>TotalPoint;
register long long Ans;
Ans=0;
for(i=1;i<=TotalPoint;i++)
{
cin>>Array[i];
Ans+=1LL*Array[i]*(TotalPoint-Array[i]+1);
}
for(i=1;i<TotalPoint;i++)
{
Ans-=1LL*min(Array[i],Array[i+1])*(TotalPoint-max(Array[i],Array[i+1])+1);
}
cout<<Ans<<endl;
return 0;
}
不要妄图追上西坠的太阳,而是要在黎明前就等着它!
浙公网安备 33010602011771号