执行用时和内存消耗击败100%用户的代码
2024-02-02 17:09:31
发布于:广东
28阅读
0回复
0点赞
因为边都是2的次幂,所以只会出现等边三角形和等腰(腰更长)三角形
#include <cstdio>
using namespace std;
int i,j,n,than_2_bigger_idx; // than_2_bigger_idx: 数组里第一个>=2的元素的下标
long long *arr,ans;
signed main(void) { // 个人代码风格
scanf("%d",&n);
arr=new long long[n]; // 合法的动态定义数组长度
for(;i<n;i++)
scanf("%lld",arr+i);
for(i=0;i<n;i++) {
ans+=arr[i]/3; // 如果这种长度的边数量大于3,则做等边三角形
arr[i]%=3; // 剩下的边数
while(arr[i]--) { // 剩下的边只能用来做等腰三角形
for(j=than_2_bigger_idx;j<n;j++)
if(arr[j]>=2) { // 找到等腰三角形需要的两个腰
arr[j]-=2,ans++;
break;
}
than_2_bigger_idx=j; // 优化时间,我一开始就是因为没优化而TLE
}
}
printf("%lld",ans); // 输出
delete[] arr; // 释放内存
return 0;
}
全部评论 1
我写是时候是:内存消耗:4.18MB 击败了6.67%的用户
2024-05-28 来自 广东
1
有帮助,赞一个