Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
#include
#include
#include
#include
#include
#include
#include
//#include
using namespace std; vector
s; int n; vector
> words[1005]; vector
> words_cnt[1006]; int dp[10005]; bool compare_two_strings(string &A, string &B) { return true; } int backtrack[10005]; int dinamicko(int i){ if(i==n){ backtrack[i] = -1; return 0; } if(dp[i] != -1) { return dp[i]; } int result=-1; int next_index = -1; vector
cntA(26, 0); for(int j = 0; j < s[i].size(); j++) { cntA[s[i][j] - 'A']++; } int k = s[i].size(); for(int j = 0; j < words[k + 1].size(); j++) { vector
cntB = words_cnt[k + 1][j]; bool ok = true, flag = false; for(int l = 0; l < 26; l++) { if(abs(cntA[l] - cntB[l]) == 0) continue; if(abs(cntA[l] - cntB[l]) == 1 and !flag) { flag = true; continue; } if(abs(cntA[l] - cntB[l]) >= 1 or flag) { ok = false; break; } } if(!ok) continue; int tmp = dinamicko(words[k + 1][j].second) + 1; if(tmp > result) { result = tmp; next_index = words[k + 1][j].second; } } if(next_index != -1) backtrack[i] = next_index; return dp[i] = result; } int main() { ios_base::sync_with_stdio(false); ifstream cin("input.txt"); memset(dp, -1, sizeof dp); cin>>n; for(int i=0; i
>a; // sort(a.begin(), a.end()); s.push_back(a); vector
alpha(26, 0); for(int j = 0; j < a.size(); j++) { alpha[a[j] - 'A']++; } words[(int) a.size()].push_back(make_pair(a, i)); words_cnt[(int) a.size()].push_back(alpha); } // sort(s.begin(), s.end()); memset(backtrack, -1, sizeof backtrack); int result = -1; int START = 0; for(int i = 0; i < n; i++) { int tmp = dinamicko(i) ; if(result < tmp and s[i].size() <= 2) { result = tmp; START = i; } } cout << result << endl; // cout << s[START] << endl; // if(result <= 1) { // cout << 1 << endl; // cout << s[0][0] << endl; // return 0; // } // set
st; string p = ""; p += s[START][0]; vector
ret; ret.push_back(p); if(s[START].size() == 1) { ret.erase(ret.begin()); } // st.insert(p); while(START != -1) { // st.insert(s[START]); ret.push_back(s[START]); START = backtrack[START]; } // cout << START << endl; // cout << s[START] << endl; if(ret[0].size() != ret[1].size() - 1) { cout << 1 << "\nA"; return 0; } cout << ret.size() << endl; for(string x : ret) { cout << x << "\n"; } return 0; }
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)