A. Random Number Checker

奇数和偶数的数量之差小于1即为Good

B. Arithmetic Exercise

计算保留k位小数的a/b的结果

模拟除法即可,注意进位的细节

void solve() {ll a, b , k;cin >> a >> b >> k;vector <int> ve(1, a/b);ll c = a % b;for (int i = 1; i <= k+1; i++) {c *= 10;ve.push_back(c / b);c %= b;}if (ve[k+1] >= 5) {ve[k]++;}for (int i = k; i > 0; i--) {if (ve[k] >= 10) {ve[k] %= 10;ve[k-1]++;} else break;}cout << ve[0] << '.';for (int i = 1; i <= k; i++) {cout << ve[i];}
}

E. Great Detective TJC

找出给定的n个数中是否有一对异或值为1的两个数

方法一:排序后依次check相邻两数的异或值,时间复杂度O(nlogn)

方法二:把检查set里是否有当前数^1,然后把它插入set里,时间复杂度O(nlogn)

void solve() {cin >> n;set<int> st;mark = 0;for (int i = 0; i < n; i++) {cin >> b;if (st.count(b^1)) mark = 1;st.insert(b);}if (mark) cout << "Yes\n";else cout << "No\n";
}

G. Matrix Repair

给出一个部分残缺的01矩阵以及完好的该矩阵的每行每列的异或值,输出完整矩阵或-1

把行表示为0到n-1,列表示为n到2*n-1

给出的每行每列的异或值叫做res[i],每行每列已知的数的亦或和叫做xor[i]

易知当某一行 / 列仅剩一个未知数时可以用res[i] ^ xor[i]得到这个未知数的值

这个未知数解出来后可以继续去为它所在的那一列 / 行做贡献

可以用拓扑排序来考虑

即把每行 / 列作为一个点,未知数作为一条边连接它所在的行和列

度为1时可以求出这个未知数的值

如果拓扑排序结束后仍有边则说明有环无解

vector <vector <int> > ve, tu;
vector <int> d, xo, res;void change(int a, int b) {int c = xo[a] ^ res[a];xo[b] ^= c;if (a > b) swap(a, b);b -= n;tu[a][b] = c;
}void solve() {cin >> n;queue<int> q;ve = vector<vector<int> > (n<<1);tu = vector<vector<int> > (n, vector<int> (n));res = xo = d = vector<int> (n<<1);for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {cin >> tu[i][j];if (tu[i][j] == -1) {d[i]++;d[n+j]++;ve[i].push_back(n+j);ve[n+j].push_back(i);} else {xo[i] ^= tu[i][j];xo[n+j] ^= tu[i][j];}}}for (int i = 0; i < n*2; i++) cin >> res[i];for (int i = 0; i < n*2; i++) {if (d[i]) {if (d[i] == 1) {q.push(i);}}}while (q.size()) {int now = q.front();q.pop();if (!d[now]) continue;d[now] = 0;for (int i : ve[now]) {if (d[i]) {d[i]--;change(now, i);if (d[i] == 1) q.push(i);}}}for (int i = 0; i < n*2; i++) {if (d[i]) {cout << "-1\n";return;}}for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {cout << tu[i][j] << (j == n-1 ? '\n' : ' ');}}
}

H. Visit the Park

给出一个图,输出按要求的节点顺序行走的权值的期望

注意两点之间可能会有多条边,存图需要特殊处理,笔者使用的是map<ll, vector<int> >

第一维存起点与终点的hash值(u<<30 | v),第二位存u->v的权值集合

然后按照给出的点的顺序遍历对应的vector即可

#define mk(a, b) (a<<30 | b)
unordered_map<ll, vector<int> > mp;
const int mod = 998244853;
int Power( ll x , int y ) {ll res = 1;while(y) {if (y & 1) (res *= x) %= mod;x = x * x % mod;y >>= 1;}return res;
}ll ny (int now) {return Power(now, mod-2);
}void solve() {cin >> n >> m >> k;for (int i = 0; i < m; i++) {cin >> a >> b >> c;mp[mk(a, b)].push_back(c);mp[mk(b, a)].push_back(c);}int now, nxt;cin >> now;ll ans = 0;ll P10 = Power(10, k-2);const ll ny10 = ny(10);for (int i = 1; i < k; i++) {cin >> nxt;const ll NOW = mk(now, nxt);if (!mp.count(NOW)) {cout << "Stupid Msacywy!";return;}int nynow = ny(mp[NOW].size());for (int j : mp[NOW]) {(ans += j * P10 % mod * nynow % mod) %= mod;}P10 = P10 * ny10 % mod;now = nxt;}cout << ans << '\n';
}

I. Nim Game

对1e5数组询问 / 修改1e5次,修改是[l, r]加x,

询问是[l, r]的集合是否有一个可以使得nim博弈后手胜利(即异或和为0)的子集

修改可使用树状数组 / 线段树,单次操作时间复杂度为

由题知每个数的上界是2e9,由线性基可知不合法区间的最大长度为

所以若区间长度大于31就可以直接确定,否则可利用线性基求解,

单次操作时间复杂度为

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#ifdef LOCAL
template<class t,class u>ostream& operator<<(ostream& os,const pair<t,u>& p){return os<<"("<<p.first<<","<<p.second<<")";}
template<class t>ostream& operator<<(ostream& os,const vector<t>& v){os<<"{"; for(auto e:v)os<<e<<","; return os<<"}";}
#endif
int n, m, t, k, a, b, c, d, cnt, mark, an, oT_To, x, y, z, ans;ll tree[100005];int lowbit(int x) {return x & (-x);
}void update(int x, int val) {for (; x < n; x += lowbit(x)) {tree[x] += val;}
}ll ask(int x) {ll res = 0;for (; x; x -= lowbit(x)) {res += tree[x];}return res;
}vector <int> xx;
bool insert(int x) {for (int i : xx) {x = min(x, i ^ x);}if (!x) return 0;for (int &i : xx) {i = min(i, i ^ x);}xx.push_back(x);return 1;}int main () {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);cin >> n >> m;vector <int> ve (n+1);for (int i = 1; i <= n; ++i) {cin >> ve[i];}for (int i = 0; i < m; ++i) {int op, l, r;cin >> op >> l >> r;switch (op) {case 1:cin >> x;update(l, x), update(r + 1, -x);break;case 2:if (r - l + 1 > 30) {cout << "Yes\n";} else {xx.clear();int i = l;while (i <= r && insert(ve[i] + ask(i)) ) i++;if (i > r) {cout << "No\n";} else cout << "Yes\n";}}}}

K. Bracket Sequence

求出n对k种合法的括号匹配序列的数量

易知n,1时结果为卡特兰数的第n项

每对括号都有k种可能性

故结果为 卡特兰数第n项

int main() {cin >> n >> k;cout << C(n*2, n) * ny(n+1) % mod * Power(k, n) % mod << '\n';
}

L. Suzuran Loves String

找出两个最长的前缀不同的后缀匹配

易知答案最小是len-1,此时字符串形如aaaaaa

找出第一个与str[0]不同的字符的下标i即可,两个后缀就是str和str+i

void solve() {string s;cin >> s;ll ans = s.size() - 1;for (int i = 1; i < s.size(); i++) {if (s[i] != s[0]) {ans = s.size() * 2 - i;break;}}cout << ans << '\n';
}

M. Sequence

输出

void solve() {cin >> n;vector <int> ve(n);for (int i = 0; i < n; i++) {cin >> ve[i];}cout << (ll)n * (*max_element(ve.begin(), ve.end()) - *min_element(ve.begin(), ve.end()));
}

第十五届吉林省大学生程序设计竞赛个人题解相关推荐

  1. 第十五届吉林省大学生程序设计竞赛

    最近刚打完吉林省程序设计竞赛,自己比较菜,成绩不是很好,拖累了两位队友,其中一位队友保研,并在比赛前一天拿到了百度的实习offer.另一位是备战考研. 比赛只过了A,B,E,L,M,最终41名 A题: ...

  2. 第十五届北京师范大学程序设计竞赛决赛(网络同步赛) B lca水 D 思维,找规律...

    第十五届北京师范大学程序设计竞赛决赛(网络同步赛) B. Borrow Classroom 题意:一棵树,点 1为根,一个人从点 b到 点 c再到点 1,第二个人从点 a出发,问第二个人能否截住第一个 ...

  3. 第十五届浙江省ACM程序设计竞赛小记

    因为前段时间一直在找实习的缘故,比赛前几乎没怎么练习,所以对这场比赛本不抱太大希望. 早上7.30在学校门口集合,坐着大巴去浙江大学紫金港校区比赛,这是第二年到浙江大学参加ACM竞赛,心情依旧是很欢悦 ...

  4. 第十五届全国大学生信息安全竞赛知识问答(CISCN)

    一.单项选择题 1.国家秘密的保密期限,除另有规定外,绝密级不超过()年 A.10年 B.50年 C.30年 D.20年 2.安卓逆向中,反编译JAVA通常使用以下哪个软件?( ) A.JPEXS B ...

  5. 第十五届全国大学生信息安全竞赛创新实践能力赛

    ​ 基于挑战码的双向认证1 这两个应该是属于非预期,查找文件内容,两个flag都出了: find / |xargs grep -ri flag{ 2>/dev/null flag{34f5fda ...

  6. 2022第十五届全国大学生信息安全竞赛(ciscn)西南赛区部分WP

    web EzSignin 访问题目flag是假的,F12源代码,看到base64解码 解码得到flag CODE 访问题目,有个aid.php直接访问不行,使用PHP为协议进行读取,input2需要等 ...

  7. 第十五届北京师范大学程序设计竞赛 [(6+1)/11,待补]

    23号和队友用一个账号一起做这套题,开了挂,用了两台电脑,由于我们做的时候还不能添加到BNUVJ,队内交流还少,因为中文题面嘛,基本相当于两个人分别打个人了... 但是鄙队实在是菜的抠脚啊,最后仅出6 ...

  8. 河南省第十四届ICPC大学生程序设计竞赛

    题目链接 https://ac.nowcoder.com/acm/contest/58860 分组背包问题 有 N N N 组物品和一个容量是 V V V 的背包. 每组物品有若干个,同一组内的物品最 ...

  9. 第十五届全国大学生智能车竞赛百度人工智能组相关文件链接

    ▲ 第十五届全国大学生智能车竞赛人工智能创意比赛 第15届全国大学生智能汽车竞赛 | 人工智能挑战赛(百度) 第十五届全国大学生智能汽车竞赛人工智能创意赛 第十五届全国大学生智能汽车竞赛百度人工智能正 ...

最新文章

  1. 华为发布《自动驾驶网络解决方案白皮书》
  2. ML:基于自定义数据集利用Logistic、梯度下降算法GD、LoR逻辑回归、Perceptron感知器、SVM支持向量机、LDA线性判别分析算法进行二分类预测(决策边界可视化)
  3. react 逆地理 高德地图_高德地图又出逆天黑科技!全国各大城市模型直接获取...
  4. HashMap+双向链表实现LRU
  5. .net 数据存储 mysql_asp.net实现存储和读取数据库图片
  6. 请实现一个函数,用来判断一棵二叉树是不是对称的。
  7. spring5源码-ioc容器
  8. 《HTML5移动Web开发实战》—— 1.6 在移动网站中使用HTML5
  9. 例子代码:web.xml
  10. 40个良好用户界面设计Tips
  11. python可以用c_我们可以在Python中使用C代码吗?
  12. 开心消消乐h5版游戏案例分享
  13. osl倒数第三层_原子最外层、次外层及倒数第三层最多容纳电子数的解释
  14. 苹果手机锁屏后无线重新连接服务器,iphone11锁屏自动断开wifi怎么办 苹果11手机热点自动断开解决方法...
  15. ##配置 SEP+RRPP 混合环组网
  16. springboot启动 lombok 找不到符号
  17. 华为语音解锁设置_华为手机该怎么实现语音翻译?其实超级简单,这里教你
  18. 基于区块链的供应链金融创新
  19. Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
  20. java-线程安全问题,线程实现线程同步,线程状态,等待唤醒机制,生产者消费者模型

热门文章

  1. 细细品味C#——泛型系列专题
  2. VTD解析XML( VTDGen、AutoPilot )
  3. 搭建Iconic+angular混合APP开发环境
  4. React 官网为什么那么快?
  5. 边工作边刷题:70天一遍leetcode: day 86
  6. 机器学习: 专家系统、认知模拟、规划和问题求解、数据挖掘、网络信息服务、图象识别、故障诊断、自然语言理解、机器人和博弈等领域。...
  7. widget窗口小部件
  8. 中兴通讯智能手机生产链探秘
  9. vue-cli树形结构/组织结构
  10. 使用 U 盘启动盘安装 Windows 7 旗舰版系统