详见:http://robotcator.logdown.com/posts/231132-topcoder-srm-623
推荐使用插件greed 2.0,非常使用的插件。但我不知道如何自己添加测试数据,下次再学习下。
Greed 2.0 https://github.com/shivawu/topcoder-greed
250pt
题意:环形跑道上有n棵树,标号为1--n,Alice跑步时记录下一些树的标号。问通过这些编号计算她最少跑了多少圈。
题解:稍微想一下就知道,一圈下来树的编号都是递增的,所以相邻记录非递增则增加一圈,这样圈数最少。
class RunningAroundPark {
public:
int numberOfLap(int N, vector<int> d) {
int cnt = 0;
for(int i = 1; i < d.size(); i ++){
if(d[i] <= d[i-1]) cnt ++;
}
return cnt+1;
}
};
500pt
题意:有一序列未知a,但给一个序列d,其中d[i]表示a[i]换算为二进制时末尾零的个数。问a中存在多少对(i, j)使得i--j区间的数为几何级数(等比数列,公比为实数)。
题解:考虑数位性质,a[i]与a[i+1]相差d[i+1]-d[i]个零,那么a[i]左移或者右移d[i+1]-d[i]位得到a[i+1],即乘以2^(d[i+1]-d[i])。所以区间(i, j)中d为等差数列,那么a在相应的区间为等比数列。范围不大,暴力。
class PotentialGeometricSequence {
public:
int numberOfSubsequences(vector<int> d) {
int cnt = 0;
for(int l = 3; l <= d.size(); l ++){
for(int i = 0; i <= d.size()-l; i ++){
int g = d[i+1] - d[i];
int flag = 1;
for(int j = i+1; j < i+l-1; j ++){
if(d[j+1]-d[j] != g) {flag = 0; break;}
}
if(flag == 1) cnt ++;
}
}
return cnt+2*d.size()-1;
// 2*d.size()-1分别是序列长度为1,2的时候的(i,j)对数
}
};
1000 pt
题意:给定集合d,求有多少个d的子集,子集所有元素的积为goodValue。
题解:记忆化搜索。
注意事项:记忆化搜索因为是递归,所以要想清楚递归边界,还有就是如果已存储则直接返回不需要递归计算。
![](https://i-blog.csdnimg.cn/blog_migrate/dce58864e5bc621621d2dd31fa30ae5b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ccdb457d16b5abf79c980d6577bb930c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e65e702b8d0607dcc5bd77afa061fc1b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/494b19cea20e5d695358247d490fe03c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/392958dcc17027932c823e174ab46d4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e65e702b8d0607dcc5bd77afa061fc1b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/053d49ffcc4fd8a4ba834c387c5637d7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/392958dcc17027932c823e174ab46d4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cf18ce7bb497a6e78375ad7c01065cff.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ac13d4ec8bcc70a04694ccb9498e81a2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dce58864e5bc621621d2dd31fa30ae5b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ccdb457d16b5abf79c980d6577bb930c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e65e702b8d0607dcc5bd77afa061fc1b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/494b19cea20e5d695358247d490fe03c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1067a5b56e7f6acc9de3f1fe54d4edff.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0d86dac942ca02f27d2c3b158e130f50.png)
![](https://i-blog.csdnimg.cn/blog_migrate/392958dcc17027932c823e174ab46d4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e65e702b8d0607dcc5bd77afa061fc1b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/053d49ffcc4fd8a4ba834c387c5637d7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/392958dcc17027932c823e174ab46d4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dce58864e5bc621621d2dd31fa30ae5b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ccdb457d16b5abf79c980d6577bb930c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e65e702b8d0607dcc5bd77afa061fc1b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/494b19cea20e5d695358247d490fe03c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1067a5b56e7f6acc9de3f1fe54d4edff.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0d86dac942ca02f27d2c3b158e130f50.png)
![](https://i-blog.csdnimg.cn/blog_migrate/392958dcc17027932c823e174ab46d4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e65e702b8d0607dcc5bd77afa061fc1b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/053d49ffcc4fd8a4ba834c387c5637d7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/392958dcc17027932c823e174ab46d4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c2f7dc975fae0b1ddcae9885a09a7aa7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dce58864e5bc621621d2dd31fa30ae5b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ccdb457d16b5abf79c980d6577bb930c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e65e702b8d0607dcc5bd77afa061fc1b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/494b19cea20e5d695358247d490fe03c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1067a5b56e7f6acc9de3f1fe54d4edff.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0d86dac942ca02f27d2c3b158e130f50.png)
![](https://i-blog.csdnimg.cn/blog_migrate/392958dcc17027932c823e174ab46d4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e65e702b8d0607dcc5bd77afa061fc1b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/053d49ffcc4fd8a4ba834c387c5637d7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b77d1cf5cad1ab81b51161e91270678d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dce58864e5bc621621d2dd31fa30ae5b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e65e702b8d0607dcc5bd77afa061fc1b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/494b19cea20e5d695358247d490fe03c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/392958dcc17027932c823e174ab46d4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/392958dcc17027932c823e174ab46d4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6973c8cb52068b6e4d7e25d2ea60e72b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f8bd84967708be229da7c64d84751f3b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f8bd84967708be229da7c64d84751f3b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0aa4d0e7092586d4a2b25e33767860d7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e65e702b8d0607dcc5bd77afa061fc1b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c4494775a5befea0c325d04f0d6eba59.png)
![](https://i-blog.csdnimg.cn/blog_migrate/392958dcc17027932c823e174ab46d4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6973c8cb52068b6e4d7e25d2ea60e72b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f8bd84967708be229da7c64d84751f3b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f8bd84967708be229da7c64d84751f3b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0aa4d0e7092586d4a2b25e33767860d7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e65e702b8d0607dcc5bd77afa061fc1b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c4494775a5befea0c325d04f0d6eba59.png)
![](https://i-blog.csdnimg.cn/blog_migrate/392958dcc17027932c823e174ab46d4f.png)
原谅我不会打整除和不整除符号,把公式弄残了。还望大侠指教。
class GoodSubset {
public:
map<pair<int, int>, int> m;
int dp(int goodValue, vector<int> d, int cur){
if(cur == 0){
if(goodValue == 1) return 1;
else return 0;
}
if(m.find(make_pair(goodValue, cur)) != m.end()){
return m[make_pair(goodValue, cur)];
}
int ans = 0;
if(goodValue%d[cur-1] != 0){
return m[make_pair(goodValue, cur)] = dp(goodValue, d, cur-1);
}else{
ans += dp(goodValue, d, cur-1);
ans %= mod;
ans += dp(goodValue/d[cur-1], d, cur-1);
ans %= mod;
return m[make_pair(goodValue, cur)] = ans;
}
}
int numberOfSubsets(int goodValue, vector<int> d) {
m.clear();
int cnt = dp(goodValue, d, d.size());
if(goodValue == 1) cnt --;
return cnt;
}
};