51nod 1065 最小正子段和 -暴力
2017-12-09 20:48
281 查看
这道题我的解法算得上是卡过去的,每组数据的答案再稍微大点就过不了了
因为答案是一个大于等于1的整数,直接暴力搜索是否存在Sj-Si=u。其中Sn代表前n个元素的和,u是枚举数从小到大枚举,也就是查询是否存在Si=Sj-u,存在的话此时的u就是答案。需要注意的是 i 必须小于 j。
因为有两个条件,直接借助map来判断,最终时间复杂度为mnlogn,这里m就是答案的值。
提交时因为第17组数据的答案有点大而超时了但超的不多,我坚信自己的代码是能通过的,多次提交后成功通过了
代码:
截图为证:
因为答案是一个大于等于1的整数,直接暴力搜索是否存在Sj-Si=u。其中Sn代表前n个元素的和,u是枚举数从小到大枚举,也就是查询是否存在Si=Sj-u,存在的话此时的u就是答案。需要注意的是 i 必须小于 j。
因为有两个条件,直接借助map来判断,最终时间复杂度为mnlogn,这里m就是答案的值。
提交时因为第17组数据的答案有点大而超时了但超的不多,我坚信自己的代码是能通过的,多次提交后成功通过了
代码:
#include<iostream> #include<map> using namespace std; long long sum[50050]; map<long long,int> all; int main(){ long long u,n,s=0; cin>>n; all[0]=-1; for(int i=0;i<n;i++){ cin>>u;s+=u; sum[i]=s; all[s]=i; } int ans=0; while(++ans){ for(int i=0;i<n;i++){ map<long long,int>::iterator v=all.find(sum[i]-ans); if(v!=all.end()&&v->second<i){ cout<<ans; return 0; } } } }
截图为证:
相关文章推荐
- 51nod 1065 最小正子段和
- 51Nod 1065 最小正子段和(归并 贪心,好题)
- 51nod 1065 最小正子段和 (贪心_好题)
- 51nod 1065 最小正子段和
- 51nod-1065 最小正子段和
- 51Nod 1065 最小正子段和 前缀和
- 51nod 1065 最小正子段和
- 51nod 1065 最小正子段和
- 51nod 1065 最小正子段和(最小正字段和)
- 51nod-1065:最小正子段和(STL)
- 51nod 1065 最小正子段和
- 最大子段和(51Nod 1049)、最小正子段和(51Nod 1065)、总结(最小子段和、最大子段和、最小正子段和)
- 51 nod 1065 最小正子段和 排序大法好
- 51NOD 1065 最小正子段和
- 51nod 1065 最小正子段和
- 51nod oj 1065 最小正子段和 【贪心--区间和】
- 51nod 1065:最小正子段和
- 51nod 1065 最小正子段和
- 51nod 1065:最小正子段和
- [暴力 乱搞] 51Nod 1616 算法马拉松19 B 最小集合