D. Exact Change
E. Replace the Numbers
G. Subsequences Galore

因为1和2的数量最大值不是很多,多了的话可以用3代替,那么枚举1和2的数量然后二分3的数量

int a[110], n;
bitset<10> bit;
bool ch(int x)
{for(int i = 1;i <= n;i ++){int num = a[i];x*3 >= a[i] ? num %= 3 : num -= x*3;while(~num && num < 10 && num <= a[i]) if(bit[num])num = -1;else num += 3;if(num != -1) return 0;}return 1;
}int main()
{   int t;scanf("%d", &t);while(t --){scanf("%d", &n);for(int i = 1;i <= n;i ++)scanf("%d", a+i);int ans = 0x3f3f3f3f;for(int i = 0;i <= 2;i ++)for(int j = 0;j <= 3;j ++){bit.reset();bit[0] = 1;for(int i = 1;i <= j;i ++) bit |= bit<<2;for(int j = 1;j <= i;j ++) bit |= bit<<1;  int l = 0, r = (1e9+2)/3+10000;while(l < r)ch(mid) ? r = mid : l = mid+1;ans = min(ans, i + j + l);}cout<<ans<<endl;}return 0;
}

代码有注释,不过也不咋好,主要并查集 + ( x = num[id[x]] ) 这操作我整懵了

int id[N], fa[N], num[N], idx = 0;  // id[]  是x在num数组的哪个位置 // num[] 是最后答案的数组,其中用并查集来整合
int find(int u){return fa[u] == u ? u : fa[u] = find(fa[u]);}int main()
{   int t;scanf("%d", &t);for(int i = 1;i <= t;i ++) fa[i] = i;while(t --){int f, x, y;scanf("%d%d", &f, &x);if(f == 1){                   num[++idx] = x;           // 加一个数 if(id[x])fa[id[x]] = idx; // 把是x的父亲设为新加的这个数的位置。 id[x] = idx;              // x 在 idx; }else{scanf("%d", &y);if(x == y)continue;     if(!id[y])num[id[x]] = y, id[y] = id[x]; // y不存在 -> 把x变成y; else fa[id[x]] = id[y];                  // y存在   -> 把x指向y; id[x] = 0;                               // 消除x存在的痕迹。 }}for(int i = 1;i <= idx;i ++)printf("%d ", num[find(i)]);return 0;
}

首先我们可以枚举2n子集, 那么一个集合的求法可以用容斥来算,容斥之后就是子集的和了,子集的和网上说sos dp,推荐博客 主要这个博客那张图好好,代码实现也有点复杂,可能我写麻烦了吧。

const int N = 2e6+10, mod = 998244353;
void mull(int &a, LL b){a = a*b%mod;return ;}
void add(int &a, LL b){a = (a+b)%mod;return ;}int a[23][26], dp[1<<23];
char s[N];
int main()
{   int n;scanf("%d", &n);for(int i = 0;i < n;i ++){scanf("%s", s);for(int j = 0;s[j];j ++)a[i][s[j]-'a'] ++;}dp[0] = 1;for(int i = 1;i < 1<<n;i ++) // 预处理  {int num[26], s = 1, k = 0;for(int j = 0;j < 26;j ++)num[j] = N;for(int j = 0;j < n;j ++)if(i>>j&1){k ++;for(int k = 0;k < 26;k ++)if(num[k] > a[j][k])num[k] = a[j][k];}for(int i = 0;i < 26;i ++) mull(s, num[i]+1);s --;dp[i] = k&1 ? s : -s;}for(int i = 0;i < n;i ++)for(int j = 0;j < 1<<n;j ++)if(j>>i&1) add(dp[j], dp[j^1<<i]);LL ans = 0;for(int j = 0;j < 1<<n;j ++){int k, sum;k = sum = 0;for(int i = 0;i < n;i ++) if(j>>i&1) k++, sum += i+1;add(dp[j], mod); // 因为dp[] 在上面可能是负的 -> 第45行. ans ^= (LL)k*sum*dp[j];}cout<<ans<<endl;return 0;
}

Educational Codeforces Round 119 (Rated for Div. 2)相关推荐

  1. Educational Codeforces Round 119 (Rated for Div. 2) 做题日志

    A Equal or Not Equal 题意 给你一个字符串, s i = = E si == E si==E表示 a ( i ) = = a ( i + 1 ) a(i) == a(i+1) a( ...

  2. Educational Codeforces Round 119 (Rated for Div. 2) EFG 题解

    Solution 赛时切了 ABCDEG,不会 F. E 考虑使用若干个集合 S i S_i Si​ 维护各个数出现的位置,那么两个操作分别可以被抽象为: 在一个集合中加入一个数. 将集合 S x S ...

  3. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  4. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  5. Educational Codeforces Round 37 (Rated for Div. 2) 1

    Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...

  6. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  7. Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)

    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...

  8. Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs

    传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici​个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...

  9. Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环

    传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...

最新文章

  1. 结婚率连7年下降,数据揭秘单身背后复杂逻辑
  2. c语言-指针的本质和使用
  3. cam350怎么看顶层_厉害的人是怎么分析问题的?(实操干货)
  4. 发布倒计时1天!华为Mate 30系列五大新功能曝光
  5. (转)ComputerStyle与currentStyle的区别
  6. 用R演示逻辑回归过程-值得收藏
  7. 装备制造业的变革时代,SCM供应链管理系统如何赋能装备制造企业转型升级
  8. Studio 3T过期了的解决办法,亲测有效
  9. pycharm中遇到的报错 Unexpected indent / unindent does not match any outer indentation level
  10. 【LeetCode-13】-罗马数字
  11. 百度地图高级实例2-如何利用自己的数据制作社交地图?只显示可视区域内的标注
  12. 电脑上的记事本便签纸怎么用
  13. Mysql中删除语句delete、truncate、drop的区别
  14. 爬虫爬数据时,post数据乱码解决办法
  15. 【闲书杂谈】《断舍离》——[日]山下英子
  16. 模拟购物车购物过程python,用函数模拟简单的购物车(Python)
  17. 语音对讲软件_微信语音转播软件哪个好?你有没有推荐的呢?
  18. No.72-HackTheBox-windows-Fighter-Walkthrough渗透学习
  19. h5忍者小游戏源码下载
  20. Siamese Capsule Networks 翻译 (孪生胶囊网络)

热门文章

  1. 猴子偷桃php代码,C++实现猴子吃桃的示例代码
  2. windows挂载ext4_使用 UEFI 双启动 Windows 和 Linux | Linux 中国
  3. docker 修改阿里镜像源_Jetson Nano 修改源镜像
  4. mysql连接主备_mysql主备配置方法
  5. imac android studio,Mac安装Android Studio的时候忘记安装Avd Manager怎么办?
  6. 牛逼!不得不服,第一次有人把Java 反射机制讲解这么透!
  7. java前补零工具类_java生成编码工具类,不足补0
  8. dbscan用 java代码_聚类算法之DBScan(Java实现)[转]
  9. 敲黑板!vue3重点!一文了解Composition API新特性:ref、toRef、toRefs
  10. 洛谷 P1706 P1036 -小试牛刀