TopCoder SRM 607 题解
2014-02-03 22:30
337 查看
。。。第一次进div1,就一道都没有搞出来,第一题理解错了题意,第二题乱搞没有成功,第三题没看 。果然深夜+感冒不是适合刷题的模式啊,不过幸好还保持在blue。
最后看了看WJMZBMR神犇的代码,表示自己果然傻逼,连第一题这样的傻逼题都没A。
250pt:
分奇数和偶数长度分别讨论,然后直接枚举中心和长度计算即可。。。
(一开始理解错题意,以为不是按顺序拼凑,对出题人只能呵呵,明明输入一个字符串就行了,偏偏要用向量存,我还以为可以随意组合。果然英语是硬伤。)
/* Ciocio's TopCoder Template */
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
#include <utility>
#include <deque>
#include <functional>
#include <vector>
#include <stack>
#include <list>
#include <bitset>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define rrep(i,b,a) for(int i=b;i>=a;--i)
#define sz(x) x.size()
#define ll long long
#define p_b push_back
#define m_p make_pair
#define pii pair<int,int>
class PalindromicSubstringsDiv1{
public:
double same(char a,char b){
if(a=='?'||b=='?') return 1.0/26.0;
return a==b?1.0:0.0;
}
double expectedPalindromes(vector <string> S1, vector <string> S2){
string S=accumulate(S1.begin(),S1.end(),string());
S+=accumulate(S2.begin(),S2.end(),string());
double rt=0.0;
int n=S.length();
//
rep(i,0,n-1){
double cur=1.0;
rt+=cur;
for(int l=1;i-l>=0&&i+l<=n-1;++l){
cur*=same(S[i-l],S[i+l]);
rt+=cur;
}
}
//
rep(i,0,n-2){
double cur=same(S[i],S[i+1]);
rt+=cur;
for(int l=1;i-l>=0&&i+1+l<=n-1;++l){
cur*=same(S[i-l],S[i+1+l]);
rt+=cur;
}
}
return rt;
}
};
475pt:
(还在想,先放AC代码)
1000pt:
(现场没人搞出来)
最后看了看WJMZBMR神犇的代码,表示自己果然傻逼,连第一题这样的傻逼题都没A。
250pt:
分奇数和偶数长度分别讨论,然后直接枚举中心和长度计算即可。。。
(一开始理解错题意,以为不是按顺序拼凑,对出题人只能呵呵,明明输入一个字符串就行了,偏偏要用向量存,我还以为可以随意组合。果然英语是硬伤。)
/* Ciocio's TopCoder Template */
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
#include <utility>
#include <deque>
#include <functional>
#include <vector>
#include <stack>
#include <list>
#include <bitset>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define rrep(i,b,a) for(int i=b;i>=a;--i)
#define sz(x) x.size()
#define ll long long
#define p_b push_back
#define m_p make_pair
#define pii pair<int,int>
class PalindromicSubstringsDiv1{
public:
double same(char a,char b){
if(a=='?'||b=='?') return 1.0/26.0;
return a==b?1.0:0.0;
}
double expectedPalindromes(vector <string> S1, vector <string> S2){
string S=accumulate(S1.begin(),S1.end(),string());
S+=accumulate(S2.begin(),S2.end(),string());
double rt=0.0;
int n=S.length();
//
rep(i,0,n-1){
double cur=1.0;
rt+=cur;
for(int l=1;i-l>=0&&i+l<=n-1;++l){
cur*=same(S[i-l],S[i+l]);
rt+=cur;
}
}
//
rep(i,0,n-2){
double cur=same(S[i],S[i+1]);
rt+=cur;
for(int l=1;i-l>=0&&i+1+l<=n-1;++l){
cur*=same(S[i-l],S[i+1+l]);
rt+=cur;
}
}
return rt;
}
};
475pt:
(还在想,先放AC代码)
/* Ciocio's TopCoder Template */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> #include <queue> #include <set> #include <map> #include <utility> #include <deque> #include <functional> #include <vector> #include <stack> #include <list> #include <bitset> using namespace std; #define rep(i,a,b) for(int i=a;i<=b;++i) #define rrep(i,b,a) for(int i=b;i>=a;--i) #define sz(x) x.size() #define ll long long #define p_b push_back #define m_p make_pair #define pii pair<int,int> #define INF (~0U>>3) class CombinationLockDiv1{ public: int minimumMoves(vector <string> P, vector <string> Q){ string S=accumulate(P.begin(),P.end(),string()); string T=accumulate(Q.begin(),Q.end(),string()); int n=sz(S); vector <int> a(n); rep(i,0,n-1){ a[i]=S[i]-T[i]; if(a[i]<0) a[i]+=10; } a.p_b(0); ++n; rrep(i,n-1,1){ a[i]-=a[i-1]; if(a[i]<0) a[i]+=10; } //change a[i] into every 0 vector <int> am(1,0); //pos-neg:min pos am[0]=0; int posSum=0,negSum=0; rep(i,0,n-1){ //cout<<a[i]<<endl; if(!a[i]) continue; int up=10-a[i],down=a[i]; int nextPosSum=posSum+up; int nextNegSum=negSum+down; vector <int> nam(nextPosSum+nextNegSum+1,INF); rep(j,-negSum,posSum){ int cur=am[j+negSum]; if(cur==INF) continue; //up nam[j+up+nextNegSum]=min(nam[j+up+nextNegSum],cur+up); nam[j-down+nextNegSum]=min(nam[j-down+nextNegSum],cur); } am=nam; posSum=nextPosSum; negSum=nextNegSum; } return am[0+negSum]; } };
1000pt:
(现场没人搞出来)
相关文章推荐
- Topcoder SRM 358:SameDigits
- Topcoder.SRM527.Div1.T2
- 【搜索+图论】TopCoder SRM 556 XorTravelingSalesman
- topcoder-srm144-div
- [TopCoder] SRM 578 DIV 2, Wolf In Zoo, Solution
- TopCoder 250 points 4-SRM 145 DIV 2 128.72/250 51.49%
- TopCoder SRM 596 Div2 第3题
- TopCoder SRM 598 Div1 第1题
- TopCoder SRM 144 DIV 1
- Topcoder SRM 626 DIV2 SumOfPower
- Topcoder SRM 144 Div2 1100 (树形dp)
- TopCoder SRM 634 Div.2[ABC]
- Topcoder SRM 638 DIV 2 (大力出奇迹)
- Topcoder Arena SRM 144 DIV2 1100 point 图遍历(非递归)+动态规划
- Topcoder SRM 648 Div.2 - A(水), B(枚举),C(DP/构造)
- topcoder 650 srm div2 1000pts
- Topcoder SRM 655 DIV1 250 CountryGroupHard
- Topcoder SRM 660 DIV1 500 Privateparty(数学)
- TopCoder SRM 663 Div2 Problem 1000 - CheeseRolling (状压dp)
- 【TopCoder SRM302Div1 900】JoinedString