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

codeforces #584 ABCD

时间:2019-11-10 19:37:44      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:==   info   hide   putc   ack   cin   merge   就会   cli   

A. Paint the Numbers

Description

技术图片

 

 

 

Solution

水题

 

B. Koala and Lights

Description

技术图片

 

 

 Solution

模拟到1e4。

C. Paint the Digits

Description

给出一个序列,将序列每个值染色为1或2。

问能否给出一种染色序列使得12序列为排序后的序列。

Solution

原序列排一遍序比较。

扫两遍,第一次染色1,第二次染色2。

判断染色序列是否完整覆盖原序列。

技术图片
  1 #include <algorithm>
  2 #include <cctype>
  3 #include <cmath>
  4 #include <cstdio>
  5 #include <cstdlib>
  6 #include <cstring>
  7 #include <iostream>
  8 #include <map>
  9 #include <numeric>
 10 #include <queue>
 11 #include <set>
 12 #include <stack>
 13 #if __cplusplus >= 201103L
 14 #include <unordered_map>
 15 #include <unordered_set>
 16 #endif
 17 #include <vector>
 18 #define lson rt << 1, l, mid
 19 #define rson rt << 1 | 1, mid + 1, r
 20 #define LONG_LONG_MAX 9223372036854775807LL
 21 #define pblank putchar(‘ ‘)
 22 #define ll LL
 23 #define fastIO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
 24 using namespace std;
 25 typedef long long ll;
 26 typedef long double ld;
 27 typedef unsigned long long ull;
 28 typedef pair<int, int> P;
 29 int n, m, k;
 30 const int maxn = 2e5 + 10;
 31 template <class T>
 32 inline T read()
 33 {
 34     int f = 1;
 35     T ret = 0;
 36     char ch = getchar();
 37     while (!isdigit(ch))
 38     {
 39         if (ch == -)
 40             f = -1;
 41         ch = getchar();
 42     }
 43     while (isdigit(ch))
 44     {
 45         ret = (ret << 1) + (ret << 3) + ch - 0;
 46         ch = getchar();
 47     }
 48     ret *= f;
 49     return ret;
 50 }
 51 template <class T>
 52 inline void write(T n)
 53 {
 54     if (n < 0)
 55     {
 56         putchar(-);
 57         n = -n;
 58     }
 59     if (n >= 10)
 60     {
 61         write(n / 10);
 62     }
 63     putchar(n % 10 + 0);
 64 }
 65 template <class T>
 66 inline void writeln(const T &n)
 67 {
 68     write(n);
 69     puts("");
 70 }
 71 template <typename T>
 72 void _write(const T &t)
 73 {
 74     write(t);
 75 }
 76 template <typename T, typename... Args>
 77 void _write(const T &t, Args... args)
 78 {
 79     write(t), pblank;
 80     _write(args...);
 81 }
 82 template <typename T, typename... Args>
 83 inline void write_line(const T &t, const Args &... data)
 84 {
 85     _write(t, data...);
 86 }
 87 string s, dist;
 88 int col[maxn];
 89 int main(int argc, char const *argv[])
 90 {
 91 #ifndef ONLINE_JUDGE
 92     freopen("in.txt", "r", stdin);
 93     // freopen("out.txt", "w", stdout);
 94 #endif
 95     fastIO;
 96     int t;
 97     cin >> t;
 98     while (t--)
 99     {
100         cin >> n;
101         cin >> s;
102         dist = s;
103         sort(dist.begin(), dist.end());
104         int now = 0;
105         for (int i = 0; i < n; i++)
106             if (s[i] == dist[now])
107             {
108                 col[i] = 1;
109                 s[i] = *;
110                 ++now;
111             }
112         for (int i = 0; i < n; i++)
113             if (s[i] == dist[now])
114             {
115                 col[i] = 2;
116                 s[i] = *;
117                 ++now;
118             }
119         if (now == n)
120         {
121             for (int i = 0; i < n; i++)
122                 cout << col[i];
123             cout << "\n";
124         }
125         else
126             cout << "-\n";
127     }
128     return 0;
129 }
View Code

 

D. Cow and Snacks

Description

给出n个零食m位客人。

每个客人由两种爱吃的零食,每种零食只有一个。

一位客人如果吃就会吃掉所有他喜欢的零食。

求一个客人吃零食序列,使得没有零食吃的客人数目最少。

Solution

很真实,拿到就想二分图。

看题解的思路。

零食作为节点,客人的喜好作为边。

并查集维护关系。

如果新加入的两个零食都出现在同一个并查集里,那么代表当前客人没有零食可选,答案加一。

技术图片
  1 #include <algorithm>
  2 #include <cctype>
  3 #include <cmath>
  4 #include <cstdio>
  5 #include <cstdlib>
  6 #include <cstring>
  7 #include <iostream>
  8 #include <map>
  9 #include <numeric>
 10 #include <queue>
 11 #include <set>
 12 #include <stack>
 13 #if __cplusplus >= 201103L
 14 #include <unordered_map>
 15 #include <unordered_set>
 16 #endif
 17 #include <vector>
 18 #define lson rt << 1, l, mid
 19 #define rson rt << 1 | 1, mid + 1, r
 20 #define LONG_LONG_MAX 9223372036854775807LL
 21 #define pblank putchar(‘ ‘)
 22 #define ll LL
 23 #define fastIO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
 24 using namespace std;
 25 typedef long long ll;
 26 typedef long double ld;
 27 typedef unsigned long long ull;
 28 typedef pair<int, int> P;
 29 int n, m, k;
 30 const int maxn = 1e5 + 10;
 31 template <class T>
 32 inline T read()
 33 {
 34     int f = 1;
 35     T ret = 0;
 36     char ch = getchar();
 37     while (!isdigit(ch))
 38     {
 39         if (ch == -)
 40             f = -1;
 41         ch = getchar();
 42     }
 43     while (isdigit(ch))
 44     {
 45         ret = (ret << 1) + (ret << 3) + ch - 0;
 46         ch = getchar();
 47     }
 48     ret *= f;
 49     return ret;
 50 }
 51 template <class T>
 52 inline void write(T n)
 53 {
 54     if (n < 0)
 55     {
 56         putchar(-);
 57         n = -n;
 58     }
 59     if (n >= 10)
 60     {
 61         write(n / 10);
 62     }
 63     putchar(n % 10 + 0);
 64 }
 65 template <class T>
 66 inline void writeln(const T &n)
 67 {
 68     write(n);
 69     puts("");
 70 }
 71 template <typename T>
 72 void _write(const T &t)
 73 {
 74     write(t);
 75 }
 76 template <typename T, typename... Args>
 77 void _write(const T &t, Args... args)
 78 {
 79     write(t), pblank;
 80     _write(args...);
 81 }
 82 template <typename T, typename... Args>
 83 inline void write_line(const T &t, const Args &... data)
 84 {
 85     _write(t, data...);
 86 }
 87 int fa[maxn];
 88 int find(int x)
 89 {
 90     if (!fa[x])
 91         return x;
 92     return fa[x] = find(fa[x]);
 93 }
 94 void merge(int x, int y)
 95 {
 96     x = find(x), y = find(y);
 97     fa[y] = x;
 98 }
 99 int main(int argc, char const *argv[])
100 {
101 #ifndef ONLINE_JUDGE
102     freopen("in.txt", "r", stdin);
103     // freopen("out.txt", "w", stdout);
104 #endif
105     n = read<int>(), m = read<int>();
106     int res = 0;
107     for (int i = 0; i < m; i++)
108     {
109         int x = read<int>(), y = read<int>();
110         if (find(x) == find(y))
111             ++res;
112         else
113         {
114             merge(x, y);
115         }
116     }
117     writeln(res);
118     return 0;
119 }
View Code

 

codeforces #584 ABCD

标签:==   info   hide   putc   ack   cin   merge   就会   cli   

原文地址:https://www.cnblogs.com/mooleetzi/p/11831284.html

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