前言
基于ICPC上海,先理论在做题的方法,对于以后的每次题解,都会尽可能的讲清楚
思路
战绩 : 2 * WA + 1AC rk2000
给你一串数,你有以下一组操作 :
- 选择一个偶数让其 / 2 /2 /2
- 选择另一个数 让其 ∗ 2 *2 ∗2
观察完之后不难发现 , 我们贪心的想,肯定是尽可能的把 ∗ 2 *2 ∗2 也就是所有偶数都 / 2 /2 /2
但是这个 ∗ 2 *2 ∗2 最后都需要加到哪一个数上面去呢 ?
显然我们肯定是加到 最大的那个数上面 因此按照思路操作即可
1.WA
思路原本是错的,我一开始直接找分类讨论,如果没有出现奇数然后我就没有找最大了
2.WA
在1WA的情况下, 胡乱计算出了答案范围竟然在
2
75
2^{75}
275 显然超过了
L
L
LL
LL 因此开了一个
u
n
s
i
g
n
e
d
unsigned
unsigned 上去 又WA了一发
由此看来 :
我还是没有养成在交的时候,以及在做题的时候,先确认数据范围的好习惯
CODE
void solve()
{
int n;cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
// sort(a+1,a+1+n);
ll cnt = 1;
for(int i=1;i<=n;i++){
while(a[i]%2 == 0 && a[i])
{
cnt*=2;
a[i]/=2;
}
}
sort(a+1,a+1+n);
a[n]*=cnt;
ll sum = 0 ;
for(int i=1;i<=n;i++)
{
sum+=a[i];
}
cout<<sum<<endl;
}