vector<vector<int> > palindromePairs(vector<string>& words) { vector<vector<int> > res; int n = words.size(); if(n <= 1) return res; unordered_map<string, int> map; for(int i = 0;i < n;i++) map[words[i]] = i; for(int i = 0;i < n;i++) { string s = words[i]; int left = 0, right = 0; while(right < s.size()) { string r = s.substr(0, right); reverse(r.begin(), r.end()); if(isPalin(s.substr(right, s.size()-right)) && map.count(r) && i != map[r]) { res.push_back({i, map[r]}); } right++; } while(left <= s.size()) { string r = s.substr(left, s.size()-left); reverse(r.begin(), r.end()); if(isPalin(s.substr(0, left)) && map.count(r) && i != map[r]) { res.push_back({map[r], i}); } left++; } } return res; }
int main (int argv, char ** argc){ (void) argv; (void) argc; int x, y; int result = 0; assert(isPalin(1001)); assert(! isPalin(1737)); for(x = 100; x < 1000; x ++){ for(y = x; y < 1000; y ++){ int temp = x * y; if(temp > result && isPalin(temp)){ result = temp; } } } printf("Result : %d\n", result); return 0; }
main() { int t; for(scanf("%d",&t);t--;) { int n; scanf("%d ",&n); int i,j; for(i=0;i<n;i++)wLen[i]=strlen(gets(word[i])); for(i=0;i<n;i++) { strcpy(b,word[i]); for(j=0;j<n;j++) { if(i!=j) { strcpy(b+wLen[i],word[j]); // printf("[!]%s %s\n",word[i],word[j]); if(isPalin(wLen[i]+wLen[j])) { puts(b); break; } } } if(j!=n)break; } if(j==n)puts("0"); } }
int minCut(string s) { int n = s.length(); vector<vector<bool> > isPalin(n, vector<bool>(n, false)); for (int i = 0; i < n; i++) { isPalin[i][i] = true; if (i < n-1 && s[i] == s[i+1]) isPalin[i][i+1] = true; } for (int i = n-2; i >= 0; i--) { // important! for (int j = i+2; j < n; j++) { if (s[i] == s[j] && isPalin[i+1][j-1]) isPalin[i][j] = true; } } vector<int> d(n, 0); for (int i = 1; i < n; i++) { d[i] = d[i-1] + 1; for (int k = 0; k <= i; k++) { if (k == 0 && isPalin[0][i]) { d[i] = 0; } else if (isPalin[k][i]) { d[i] = min(d[i], d[k-1]+1); } } } return d[n-1]; }
char isPalin(int x, int y){ char res = 0; if ( x >= y ) return 1; if ( dp2[x][y] != -1 ) return dp2[x][y]; if ( str[x] == str[y] ) res = isPalin(x + 1, y - 1); return dp2[x][y] = res; }
vector<vector<string>> partition(string s) { vector<vector<string>> result; if( s.size()<=0) return result; int size = s.size(); vector<vector<bool>> isPalin(size,vector<bool>(size,false)); getPalin(isPalin,s); vector<string> cur; dfs(result,cur,0,s,isPalin); return result; }
main() { int i; int isPalin(int); int isPrime(int); char intro[] = "This is a number"; printf("Hello World\n"); for(i=0; i<15000; i++) { if(isPrime(i)==1 && isPalin(i)==1) { printf("%s %d is a palindrome\n",intro,i); } } }
vector<vector<string>> partition(string s) { result.clear(); int N = s.size(); vector<vector<bool>> isPalin(N, vector<bool>(N, true)); setIsPalin(s, isPalin, N); vector<string> tmp; for(int i = 0; i < N; i++){ if(isPalin[0][i]){ //如果从0到i是回文,则对余下字符串判断是否能划分 part(0, i, tmp, s, isPalin, N); } } return result; }
long rec(int x, int y){ long res = 0; if ( x > y ) return 0; if ( x == y ) return 1; if ( dp[x][y] != -1 ) return dp[x][y]; res += rec(x, y - 1) + rec(x + 1, y); res -= rec(x + 1, y - 1); if ( isPalin(x,y) ) res++; return dp[x][y] = res; }
void partition(int start) { if(start > len-1 ) { res.push_back(path); return; } for(int i=1; i<=len-start; i++) { // i is len string str = s.substr(start, i); if(isPalin(str)) { path.push_back(str); partition(start+i); path.pop_back(); } } }
int main() { int t,a,b,k=0,i; scanf("%d",&t); while(t--) { scanf("%d%d",&a,&b); for(i=a;i<=b;i++) { if(isPalin(i)) { k++; } } printf("%d\n",k); k=0; } return 0; }
int minCut(string s) { int n = s.length(); vector<vector<bool>> isPalin(n, vector<bool>(n, false)); vector<int> dp(n, INT_MAX); for (int i = 0; i < n; i++) { isPalin[i][i] = true; } dp[n - 1] = 0; for (int i = n - 2; i >= 0; i--) { dp[i] = dp[i + 1] + 1; for (int j = i + 1; j < n; j++) { if (s[i] == s[j]) { if (i + 1 == j || isPalin[i + 1][j - 1]) { isPalin[i][j] = true; if (j + 1 == n) dp[i] = 0; else dp[i] = min(dp[j + 1] + 1, dp[i]); } } } } return dp[0]; }
int minCut(string s) { if (s.length() == 1) return 0; vector<vector<bool> > isPalin(s.length(), vector<bool>(s.length(), false)); for (int L = 1; L <= s.length(); L ++) { for (int i = 0; i < s.length() - L + 1; i ++) { int j = i + L - 1; if (s[i] == s[j]) { if (i + 1 >= j - 1 || isPalin[i + 1][j - 1]) { isPalin[i][j] = true; } } } } vector<int> m(s.length(), INT_MAX); for (int i = 0; i < s.length(); i ++) { m[i] = i; } for (int i = 0; i < s.length(); i ++) { if (isPalin[0][i]) { m[i] = 0; continue; } for (int j = i - 1; j >= 0; j --) { if (isPalin[j + 1][i]) { m[i] = min(m[i], 1 + m[j]); } } } return m[s.length() - 1]; }