#include <iostream> #include <string> #include <map> using namespace std; bool isHw(string s) { int i, l; l = s.length(); for (int i = 0; i < l / 2; i++) { if (toupper(s[i]) != toupper(s[l - i - 1])) return false; } return true; } int main() { string s; while (getline(cin, s)) { int i, j, maxl, num = 0; map<int, int> m; map<string, int> ms;//防止相同的回文串重复计数,按题目意思应该是统计同一长度不同的串 maxl = 0; for (i = 0; i < s.length(); i++) { if(!isalpha(s[i])) continue; string str; for (j = i; j < s.length(); j++) { if(!isalpha(s[j])) { str = ""; continue; } str += s[j]; if (isHw(str) && ms[str] == 0) { ms[str]++; if (str.length() > maxl) maxl = str.length(); m[str.length()]++; } } } if(maxl != 0) cout << maxl << " " << m[maxl] << endl; } return 0; }
#include <iostream> #include <map> #include <vector> #include <algorithm> using namespace std; vector<int> v; map<int, int> mmp; bool cmp(int a, int b) { if(mmp[a] == mmp[b]) return a > b; return mmp[a] > mmp[b]; } bool isPrime(int n) { if(n == 1) return false; for(int i = 2; i <= n / 2; i++) { if(n % i == 0) return false; } return true; } void dfsPrime(int m, int n) { if(m >= n && !v.empty()) { sort(v.begin(), v.end(), cmp); map<int, int> op; for(int i = 0; i < v.size(); i++) { op[v[i]]++; if(op[v[i]] == 1 && mmp[v[i]] != 0) cout << v[i] << " " << mmp[v[i]] << " "; } cout << endl; return ; } else { if(m % 2 != 0) m++; for(int j = 2; j <= m / 2; j++) { if(isPrime(j) && isPrime(m - j)) { v.push_back(j); v.push_back(m - j); mmp[j]++; mmp[m - j]++; dfsPrime(m + 1, n); v.pop_back(); v.pop_back(); mmp[j]--; mmp[m- j]--; } } } } int main() { int m, n; while(cin >> m >> n) { dfsPrime(m, n); } return 0; }
PS: 第二题当前用例正常,比如10 16 就会异常,目前没De出来,回头在更新, mark!
原文:https://www.cnblogs.com/ache/p/12630050.html