码迷,mamicode.com
首页 > 其他好文 > 详细

CF1277D Let's Play the Words?

时间:2019-12-16 09:45:14      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:color   span   int   else   mes   string   c++   ack   turn   

思路:

字符串其实只有0...0, 0...1, 1...0, 1...1四种。

实现:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 set<string> st[4];
 4 bool work(set<string>& a, set<string>& b, map<string, int>& mp, vector<int>& res)
 5 {
 6     int d = a.size() - b.size();
 7     for (auto it: a)
 8     {
 9         if (res.size() == d / 2) break;
10         string tmp = it;
11         reverse(tmp.begin(), tmp.end());
12         if (b.count(tmp)) continue;
13         res.push_back(mp[it]);
14     }
15     return res.size() >= d / 2;
16 }
17 int main()
18 {
19     int t; cin >> t;
20     while (t--)
21     {
22         for (int i = 0; i < 4; i++) st[i].clear();
23         int n; cin >> n;
24         map<string, int> mp;
25         for (int i = 0; i < n; i++)
26         {
27             string s; cin >> s;
28             mp[s] = i + 1;
29             int a = *s.begin() - 0, b = *(s.end() - 1) - 0;
30             int p = a * 2 + b;
31             st[p].insert(s);
32         }
33         if (!st[0].empty() && !st[3].empty() && st[1].empty() && st[2].empty())
34         {
35             cout << -1 << endl; continue;
36         }
37         vector<int> res;
38         bool ok = false;
39         if (st[1].size() > st[2].size()) ok = work(st[1], st[2], mp, res);
40         else ok = work(st[2], st[1], mp, res);
41         if (ok)
42         {
43             cout << res.size() << endl;
44             for (auto it: res) cout << it << " ";
45             cout << endl;
46         }
47         else cout << -1 << endl;
48     }
49     return 0;
50 }

CF1277D Let's Play the Words?

标签:color   span   int   else   mes   string   c++   ack   turn   

原文地址:https://www.cnblogs.com/wangyiming/p/12046851.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!