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
using namespace std; const short max_size = 1000; short n; vector
words; unordered_map
mapa; short cnt_words(const vector
& c) { short res = 0; unordered_map
cnt_map; for(short i = 0; i < n; i++) { string s = ""; for(short j = 0; j < n; j++) { s += c[i][j]; } cnt_map[s]++; } for(short j = 0; j < n; j++) { string s = ""; for(short i = 0; i < n; i++) { s += c[i][j]; } cnt_map[s]++; } for(pair
p : mapa) { res += min(p.second, cnt_map[p.first]); } return res; } int main() { ios_base::sync_with_stdio(false); short k; cin >> n >> k; for(short i = 0; i < k; i++) { string s; cin >> s; words.push_back(s); mapa[s]++; } map
, bool> map_visited; vector
v(n); string S = ""; for(int i = 0; i < n; i++) { S += "."; } for(int i = 0; i < n; i++) { v[i] = S; } queue
> q; queue
q_vis; q_vis.push(0); q.push(v); short res = 0; vector
tmp; while(!q.empty()) { vector
c = q.front(); q.pop(); short visited = q_vis.front(); q_vis.pop(); short cnt = 0; for(short i = 0; i < n; i++) { for(short j = 0; j < n; j++) { if(c[i][j] == '.') { cnt++; break; } } if(cnt > 0) { break; } } if(cnt == 0 and cnt_words(c) >= 2 * n) { res++; // for(short i = 0;i < n; i++) { // for(short j = 0; j < n; j++) { // cout << c[i][j]; // } // cout << endl; // } // cout << endl; continue; } if(cnt == 0) { continue; } for(short w = 0; w < k; w++) { if(!(visited & (1 << w))) { for(short i = 0; i < n; i++) { bool check = true; for(short j = 0; j < n; j++) { if(c[i][j] != '.' and c[i][j] != words[w][j]) { check = false; break; } } if(check) { tmp = c; for(short j = 0; j < n; j++) { tmp[i][j] = words[w][j]; } if(!map_visited[tmp]) { q.push(tmp); q_vis.push(visited | (1 << w)); map_visited[tmp] = true; } } } for(short j = 0; j < n; j++) { bool check = true; for(short i = 0; i < n; i++) { if(c[i][j] != '.' and words[w][i] != c[i][j]) { check = false; break; } } if(check) { tmp = c; for(short i = 0; i < n; i++) { tmp[i][j] = words[w][i]; } if(!map_visited[tmp]) { map_visited[tmp] = true; q.push(tmp); q_vis.push(visited | (1 << w)); } } } } } } cout << res << endl; 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)