Vika and Squares 【思维+技巧+debug???】
2017-08-09 18:16
260 查看
题意:已知n个数字,可以以某个数字为起点,按从左到右(到最右边后轮回到最左)各自-1(但要保证大于0)。问最多能减多少个1
思路:找出最小的min,ans=min*n。 再确定最长的不含0的序列长度Len那么有 ans+=Len; 技巧在开2倍数组去保存。
错误分析:不明所以
数据分析:n<=2e5
复杂度分析:不明所以为何2份代码感觉都是4e10的复杂度。为什么一个TLE一个AC。
思路:找出最小的min,ans=min*n。 再确定最长的不含0的序列长度Len那么有 ans+=Len; 技巧在开2倍数组去保存。
错误分析:不明所以
数据分析:n<=2e5
复杂度分析:不明所以为何2份代码感觉都是4e10的复杂度。为什么一个TLE一个AC。
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=200000+5; int a[maxn*2]; int main(void) { int n; cin >> n; ll minn=LONG_LONG_MAX; int index; for(int i=1; i<=n; i++) { scanf("%d",&a[i]); a[i+n]=a[i]; if(a[i]<=minn) { minn=a[i],index=i; } } for(int i=1; i<=n*2; i++) a[i]-=minn; ll ans=0; ans+=minn*n; int len=0; int i,j; for(i=1;i<=2*n;i++) { if(a[i]) { for(j=i;;j++) { if(a[j]==0) break; } if(len<j-i) len=j-i; // printf("%d\n",len); i=j; } } cout << ans+len << endl; }
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=200000+5; int a[maxn]; int main(void) { int n; cin >> n; ll minn=LONG_LONG_MAX; int index; for(int i=1; i<=n; i++) { scanf("%d",&a[i]); if(a[i]<=minn) { minn=a[i],index=i; } } for(int i=1; i<=n; i++) a[i]-=minn; ll ans=0; ans+=minn*n; int len; int maxlen=-INT_MAX; for(int i=1;i<=n;i++) /***????***/ { len=0; if(a[i]!=0) { int j=i; while(a[j]!=0) { len++; j++; if(j==n+1) j=1; } } maxlen=max(maxlen,len); } cout << ans+maxlen << endl; }
相关文章推荐
- Eclipse 的 Debug 介绍与技巧
- debug调试技巧
- Eclipse的Debug调试技巧大全
- JavaScript程序员必备的5个debug技巧
- uva 12716 GCD XOR (数论)枚举技巧(筛法) + 思维
- android debug 的一些技巧
- JS调试必备的5个debug技巧
- hdu 6016(思维技巧)@
- Eclipse 的 Debug 介绍与技巧
- Android Studio 掌握这些调试技巧,Debug 能力不能再高啦
- JavaScript程序员必备的5个debug技巧
- JS调试必备的5个debug技巧_javascript技巧
- Debug 技巧整理(持续更新)
- Android Studio Debug技巧
- Eclipse的Debug调试技巧大全(总结)
- iOS学习之Xcode 的Debug技巧
- [Android编程心得]Debug的一些技巧
- 培养创造性思维的20个技巧
- JS调试必备的5个debug技巧
- HDU:5773 The All-purpose Zero(LIS-n*logn解法+思维+技巧)