【Codeforces 805】D. Minimum number of steps
2017-05-07 17:37
295 查看
题目链接:http://codeforces.com/contest/805/problem/D
思路:从左到右进行遍历,当遇到b的时候,计算前面有多少个a,
然后求出转换从str[0]到这个位置的子字符串变化需要次数,是2^numA-1次,
写出下面代码,结果TLE。
可以发现findNum有很多重复计算,时间复杂度变成O(N^2)了, 优化后的代码为。
思路:从左到右进行遍历,当遇到b的时候,计算前面有多少个a,
然后求出转换从str[0]到这个位置的子字符串变化需要次数,是2^numA-1次,
写出下面代码,结果TLE。
#include <iostream> #include <cstdio> #include <cstring> using namespace std; char str[1000002]; const int mod= 1e9+7; __int64 findNum(int n){ __int64 num=1; while(n--){ num=num*2; num=num%mod; } return num-1; } int main() { int n; scanf("%s",str); int numA=0,numB=0; __int64 sum=0; for(int i=0;i<strlen(str);i++){ if(str[i]=='a'){ numA++; }else{ sum+=findNum(numA); sum=sum%mod; } } printf("%I64d\n",sum); return 0; }
可以发现findNum有很多重复计算,时间复杂度变成O(N^2)了, 优化后的代码为。
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int mod= 1e9+7; int main() { int n; string s; cin>>s; int numA=0,numB=0,t=1; __int64 sum=0; for(int i=0;i<s.size();i++){ if(s[i]=='a'){ numA++; t=(t<<1)%mod; }else{ sum+=t-1; sum=sum%mod; } } printf("%I64d\n",sum); return 0; }
相关文章推荐
- Codeforces-804 B. Minimum number of steps(贪心+规律)
- 【codeforces 805D】Minimum number of steps
- 【CodeForces 804B】Minimum number of steps(思维+数学)
- #411 Div.2 D. Minimum number of steps
- CF#804 B. Minimum number of steps(字符串,思维)
- Codeforces Round #411 (Div. 2) D. Minimum number of steps
- Codeforces Round #411 D. Minimum number of steps (思维题)
- codeforces Minimum number of steps (804 B)
- Codeforces Round #411 D. Minimum number of steps
- Codeforces Round #411 (Div. 2) D. Minimum number of steps
- Codeforces Round #411 (Div. 2) D. Minimum number of steps(思维题目)
- Codeforces Round #411(Div. 2)D. Minimum number of steps【思维递推+快速幂】
- Minimum number of steps
- 【贪心】codeforces D. Minimum number of steps
- 【推导】Codeforces Round #411 (Div. 1) B. Minimum number of steps
- [CF805D] Minimum number of steps(找规律,贪心)
- Minimum number of steps
- Codeforces Round #411 (Div. 2) D. Minimum number of steps
- B. Minimum number of steps
- Codeforces Round #411 (Div. 2)D. Minimum number of steps(贪心)