EASY:

B. Binary Tree
给定一棵树,双方轮流玩游戏,每次可以移除一棵完全二叉树子树。问最后谁会赢。因为完全二叉树一定是奇数,所以直接判断奇偶性即可。

void solve(){n=read();rep(i,1,n-1){int u=read(),v=read();}puts(n&1?"Alice":"Bob");
}

D. Defining Labels
进制相关,就是他是用10-k~10来代替对应的进制

void solve(){LL k=read(),n=read();vector<int> ans;LL tmp=n;while(true){auto temp=tmp%k;if(temp==0) {ans.push_back(9);tmp /= k;tmp --;}else{ans.push_back(10-k+temp-1);tmp /= k;}if(tmp<=0) break;}reverse(ans.begin(), ans.end());for(auto u:ans) printf("%d",u);printf("\n");
}

G. Game Design
感觉还是比较好构造的

#include <iostream>
#include <vector>
using namespace std;
const int maxn = 1e5 + 10;
int k, tot;
int fa[maxn], c[maxn];
vector<int> G[maxn];
void dfs(int n, int f) {++tot;fa[tot] = f;if (f) {G[f].push_back(tot);}if (n == 1) {return;}int now = tot;if (n & 1) {dfs(2, now);dfs(n / 2, now);} else {dfs(1, now);dfs(n - 1, now);}
}
void dfs2(int u) {if (G[u].empty()) {c[u] = 1;return;}for (auto v : G[u]) {dfs2(v);c[u] += c[v];}
}
int main() {cin >> k;if (k == 1) {cout << "2\n";cout << "1\n";cout << "2 1\n";return 0;}dfs(k, 0);dfs2(1);cout << tot << '\n';for (int i = 2; i <= tot; i++) {cout << fa[i] << ' ';}cout << '\n';for (int i = 1; i <= tot; i++) {cout << c[i] << ' ';}cout << '\n';return 0;
}

MID

E. Erasing Numbers
对于i位置,对所有比a[i]大的置为1,否则置为0.
110 001之类的类型并不改变0和1数量之间的关系,只有000和111改变。所以找到所有能删掉的0或者1,然后看是否能将二者数量删的一样多。

int sl[N],sr[N];void solve(){int n=read();vector<int> a(n+1),st(n+1,0);rep(i,1,n) a[i]=read();for(int i=1;i<=n;++i){int big=n-a[i],small=a[i]-1;if(big==small){st[i]=1;continue;}vector<int> L,R;rep(j,1,i-1) {L.push_back(a[j]>a[i]);}rep(j,i+1,n){R.push_back(a[j]>a[i]);}if(big>small){int sum=0,now=0;for(int i=0;i<L.size();++i){if(L[i]==0) now --;else now ++;now=max(0, now);if(now>=3) now -= 2, sum ++;}now=0;for(int i=0;i<R.size();++i){if(R[i]==0) now --;else now ++;now=max(0, now);if(now>=3) now -= 2, sum ++;}if(2*sum>=big-small) st[i]=1;}else{int sum=0,now=0;for(int i=0;i<L.size();++i){if(L[i]==1) now --;else now ++;now=max(0, now);if(now>=3) now -= 2, sum ++;}now=0;for(int i=0;i<R.size();++i){if(R[i]==1) now --;else now ++;now=max(0, now);if(now>=3) now -= 2, sum ++;}if(2*sum>=small-big) st[i]=1;}}for(int i=1;i<=n;++i) printf("%d",st[i]);printf("\n");
}

J. Junior Mathematician
比较典型的数位DP,一开始像用和和平方和来凑出要求的式子。后来发现/2可能没有逆元。所以换了一种方式,每次增加一位会增加哪些信息?记录一个已构造数字和与当前情况下题目中那个式子关于m的模数,即f[i][j][k]表示构造到i为已构造数字和模m为j,当前构造的题干式子模m为k的方案数。

const int N=200010,M=N*2,mod=1e9+7;
int f[5010][61][61][2]; //f[i][j][k][flag]
int num[5010],pos,tmp[5010],m;
int power[N];LL dfs(int p,int sum,int more,int flag){if(p==0) return more==0;if(f[p][sum][more][flag]!=-1&&flag)return f[p][sum][more][flag];int up=flag?9:num[p];LL ans=0;for(int i=0;i<=up;++i){ans=(ans+dfs(p-1,(sum+i)%m, (more+i*power[p-1]%m-i*sum%m+m)%m, flag||(i<up)))%mod;}if(flag)f[p][sum][more][flag]=ans;return ans;
}LL calc(string &s,int m){pos=0;for(int i=0;i<s.size();++i){tmp[++pos]=s[i]-'0';}// rep(i,1,pos) cout << tmp[i];cout << "\n";if(m){tmp[pos] --;for(int i=pos;i>=1;--i){if(tmp[i]<0){tmp[i] += 10;tmp[i-1] -= 1;}}}int st = tmp[1] == 0 ? 2 : 1;int p=0;for(int i=pos;i>=st;--i)num[++p]=tmp[i];return dfs(p,0,0,0);
}void solve(){string L,R;cin >> L >> R >> m;power[0]=1;for(int i=1;i<=5000;++i)power[i]=(LL)power[i-1]*10%m;rep(i,0,R.size()) rep(j,0,m) rep(k,0,m) rep(l,0,1)f[i][j][k][l]=-1;LL ansL=calc(L,1),ansR=calc(R,0);print(((ansR-ansL)%mod+mod)%mod);
}

2019-2020 ICPC Asia Hong Kong Regional Contest相关推荐

  1. 点分治问题 ----------- 2019-2020 ICPC Asia Hong Kong Regional Contest C.Constructing Ranches[点分治+树状数组]

    题目链接 题目大意: 给你一个nnn个顶点的树,树上的顶点都有一个自己的权值,现在问你有多少对(u,v)(u,v)(u,v),它们路径上点的权值集合可以组成一个多边形? 解题思路: 1.对于树上路径问 ...

  2. 2019-2020 ICPC Asia Hong Kong Regional Contest 补题(部分)

    codeforces原题链接 大佬题解 B - Binary Tree 每个人每次一定拿走奇数(2k−12^k-12k−1)个节点,如果先手必胜不难发现两人轮流拿最终一定拿奇数次(每次奇数个节点)说明 ...

  3. The 2020 ICPC Asia Shenyang Regional Programming Contest I题 Rise of Shadows(数论)

    题目链接The 2020 ICPC Asia Shenyang Regional Programming Contest 题目大意: 一天内有H小时,每小时M分钟,时针分针以恒定速率旋转. 现在若时针 ...

  4. The 2020 ICPC Asia Yinchuan Regional Programming Contest

    The 2020 ICPC Asia Yinchuan Regional Programming Contest A 开三个vector数组存储x,y,z轴上的点,unique+erase去重 #in ...

  5. 【2020 ICPC Asia East Continent Final】赛前训练

    这里写自定义目录标题 [2020 ICPC Asia East Continent Final]赛前训练 A - Namomo Subsequence 输入: 输出: 样例: 解析: 代码: F - ...

  6. 并查集 ---- 扩展域并查集判二分图 + 循环模拟字典树 The 2020 ICPC Asia Macau Regional Contest C. Club Assignment (详解)

    题目链接 题目大意: 有n个数,现在要把他们拆分成两个集合,假设S为集合,有如下定义: f(S)={min(x⊕y)∣x,y∈S,andx!=y}f(S)=\{min(x\oplus y)|x,y\i ...

  7. The 2020 ICPC Asia Macau Regional Contest J. Jewel Grab(数颜色+链表)

    J. Jewel Grab Tartarus _Wallace_ 转化询问:对于一个询问 [s,k],找到一个最长的区间 [s,t],满足区间中出现次数超过一次的元素,的出现次数减一,的和,不超过 k ...

  8. The 2020 ICPC Asia Macau Regional Contest A. Accelerator(分治+NTT)

    A. Accelerator 实质上就是求n个多项式相乘 (a1+x)(a2+x)-(an+x)(a_1+x)(a_2+x)\dots(a_n+x) (a1​+x)(a2​+x)-(an​+x) 对于 ...

  9. The 2020 ICPC Asia Macau Regional Contest

    文章目录 前言 D.Artifacts F. Fixing Networks L. Random Permutation 总结 前言 vp D.Artifacts 题意:阅读理解,字符串中提取出来对应 ...

最新文章

  1. 一文图解机器学习的基本算法!
  2. Unable to connect to the Redgate Client Service
  3. 清除XCode缓存和生成文件
  4. _ASSERTE(_CrtIsValidHeapPointer(pUserData))错误详解
  5. 2句搞定 DataGridView 让选中行在可视范围内
  6. Instant Client 配置
  7. 基于XAMPP的Testlink安装方法
  8. mac mysql配置jdk_mac开发环境搭建
  9. 3ds Max小白入门小案例|旋转楼梯
  10. 笔记本双网卡带宽叠加上网
  11. 弗洛伊德(Floyd)算法详解
  12. 【今日头条2019,笔试题】机器人跳跃问题
  13. BIOS 和 UEFI
  14. 微信公众号文字该如何排版?
  15. ecshop活动页_ECShop:专题活动
  16. ubuntu20.04下安装微信和qq
  17. 股票期权与定价以及用python实现
  18. asp.net医院信息管理系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目
  19. OIM同步OID(OID-Connector 9.0.4.12)
  20. 二维点云ICP原理推导

热门文章

  1. java无法重命名文件_巧妙地解决Java文件重命名失败的问题
  2. java session logout_Spring Session Logout
  3. 拒绝验证因为有你,我不孤单
  4. ModuleNotFoundError: No module named ‘lap‘ 已解决
  5. 空洞卷积(扩张卷积,带孔卷积,atrous convolution)的一些总结与理解
  6. k8s学习-CKA真题-Pod指定节点部署
  7. GBase 8c发布(一)
  8. 大汇总 | 9种基于神经辐射场NeRF的SLAM方法你都知道吗?
  9. Java中的数据类型转换
  10. 网络空间安全---计算机网络安全概述