Codeforces Round #694 (Div. 1) 部分简要题解
A - Strange Birthday Party
越大的人应该获得更小价值的礼物。
证明:有两个人,其中,有两个礼物价值分别是,其中。当分别获得礼物,付出的代价是。当分别获得礼物,付出的代价是。
#include<bits/stdc++.h>
#define ios std::ios::sync_with_stdio(false) , cin.tie(0)
using namespace std ;
int main()
{ios ;int T ;cin >> T ;while(T --){int n , m ;cin >> n >> m ;vector<int> k(n) ;vector<int> c(m + 1) ;for(int i = 0 ; i < n ; i ++) cin >> k[i] ;for(int i = 1 ; i <= m ; i ++) cin >> c[i] ;sort(k.begin() , k.end()) ;long long ans = 0 ;int now = 1 ;for(int i = n - 1 ; i >= 0 ; i --){if(now <= k[i]){ans += c[now] ;now ++ ;}else{ans += c[k[i]] ;}}cout << ans << '\n' ;}return 0 ;
}
B - Strange Definition
是平方数等价于是平方数。
把内每个数的偶数个数的因子都去除掉,去除后的相同的数认为是一类。
在一秒后,类的大小是偶数的类,全是1的类可以合并。
#include<bits/stdc++.h>
#define ios std::ios::sync_with_stdio(false) , cin.tie(0)
using namespace std ;
int main()
{ios ;int T ;vector<int> id(1000001 , 0) ;function<void()> init = [&](){for(int i = 1 ; i <= 1000000 ; i ++) id[i] = i ;for(int i = 2 ; i <= 1000000 ; i ++){for(int j = i ; j <= 1000000 ; j += i){int cnt = 0 ;while(id[j] % i == 0){id[j] /= i ;cnt ++ ;}if(cnt % 2 == 1) id[j] *= i ;}}} ;cin >> T ;init() ;while(T --){int n , q ;cin >> n ;vector<int> v(n) ;for(int i = 0 ; i < n ; i ++){int x ;cin >> x ;v[i] = id[x] ;}int ans = 0 ;int ans2 = 0 ;sort(v.begin() , v.end()) ;for(int i = 0 ; i < n ; i ++){int j = i ;while(j + 1 < n && v[j + 1] == v[j]) j ++ ;if((j - i + 1) % 2 == 0 || v[i] == 1) ans2 += j - i + 1 ;ans = max(ans , j - i + 1) ;i = j ;}cin >> q ;while(q --) {long long w ;cin >> w ;if(w >= 1) cout << max(ans , ans2) << '\n' ;else cout << ans << '\n' ;}}return 0 ;
}
C - Strange Shuffle
这道题目有一些抽象,主要是考察打表能力。
打表之后会发现,每次迭代会增加一个大于的数。并且这些大于的数是连续的。先花费的次数产生一个的连续大于的段,再花费的次数找到一个大于的数。
然后发现,并且递增的长度为的段只有一个,通过三分找到这个段。
#include<bits/stdc++.h>
using namespace std ;
int n , k ;
int ask(int x)
{if(x > n) x -= n ;printf("? %d\n" , x) ;fflush(stdout) ;int ans ;scanf("%d" , &ans) ;return ans ;
}
int main()
{cin >> n >> k ;int block = (int)(sqrt(n)) - 1 ;for(int i = 1 ; i <= block ; i ++) ask(1) ;int now = 1 ;int l , r ;for(int i = 1 ; i <= n ; i ++){if(ask(now) > k){l = now ;r = now + n - 1 ;break ;}else now += block ;if(now > n) now -= n ;}int ans = l ;while(l <= r){int lmid = (2 * l + r) / 3 ;int rmid = (2 * r + l + 2) / 3 ;if(ask(lmid) < ask(rmid)) ans = lmid , r = rmid - 1 ;else ans = rmid , l = lmid + 1 ;}ans ++ ;if(ans > n) ans -= n ;printf("! %d\n" , ans) ;return 0 ;
}
D - Strange Housing
好吧,比赛时候就算写了这题,也会因为一个细节。因为有。
很容易发现如果是个连通图,肯定是,的时候能涂色就涂色即可。如果不是个连通图,就是。
#include<bits/stdc++.h>
#define ios std::ios::sync_with_stdio(false) , cin.tie(0)
using namespace std ;
int main()
{ios ;int T ;cin >> T ;while(T --){int n , m ;cin >> n >> m ;vector<vector<int>> g(n + 1) ;for(int i = 1 ; i <= m ; i ++){int u , v ;cin >> u >> v ;g[u].push_back(v) ;g[v].push_back(u) ;}function<bool()> can = [&](){queue<int> q ;q.push(1) ;vector<bool> vis(n + 1 , false) ;vis[1] = true ;while(!q.empty()){int u = q.front() ;q.pop() ;for(auto v : g[u]) if(!vis[v]) vis[v] = true , q.push(v) ;}for(int i = 1 ; i <= n ; i ++) if(!vis[i]) return false ;return true ;} ;if(!can()){cout << "NO\n" ;continue ;}vector<int> c(n + 1 , -1) ;function<void()> bfs = [&](){queue<int> q ;q.push(1) ;c[1] = 1 ;while(!q.empty()){int u = q.front() ;q.pop() ;bool flag = 0 ;for(auto v : g[u]) if(c[v] == 1) flag = 1 ;if(flag) c[u] = 0 ;else c[u] = 1 ;for(auto v : g[u]) if(c[v] == -1) q.push(v) , c[v] = 0 ;}} ;bfs() ;cout << "YES\n" ;int cnt = 0 ;for(int i = 1 ; i <= n ; i ++) if(c[i] == 1) cnt ++ ; cout << cnt << '\n' ;for(int i = 1 ; i <= n ; i ++) if(c[i] == 1) cout << i << ' ' ;cout << '\n' ;}return 0 ;
}
Codeforces Round #694 (Div. 1) 部分简要题解相关推荐
- Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #694 (Div. 1 + Div2)(A ~ ...
- Codeforces Round #694 Div. 2
Codeforces Round #694 Div. 2 CodeForces 1471A Strange Partition CodeForces 1471B Strange List CodeFo ...
- (6/6) Codeforces Round #694 (Div. 2)
(6/6) Codeforces Round #694 (Div. 2) A. Strange Partition 题意: 给一个数组,数组中的所有元素可以任意合并,求数组的每个元素除以x上去整的和, ...
- Codeforces Round #198 (Div. 2)A,B题解
Codeforces Round #198 (Div. 2) 昨天看到奋斗群的群赛,好奇的去做了一下, 大概花了3个小时Ak,我大概可以退役了吧 那下面来稍微总结一下 A. The Wall Iahu ...
- Codeforces Round #774 (Div. 2)E题题解
Codeforces Round #774 (Div. 2) E. Power Board 题目陈述 有一个n×m(1≤n,m≤106)n\times m(1\le n,m\le10^6)n×m(1≤ ...
- Codeforces Round #640 (Div. 4)(ABCDEG题解)
文章目录 A. Sum of Round Numbers B - Same Parity Summands C - K-th Not Divisible by n D - Alice, Bob and ...
- Codeforces Round #635 (Div. 2)(A~D)题解
Codeforces #635 A~D A.Ichihime and Triangle B.Kana and Dragon Quest game C.Linova and Kingdom D.Xeni ...
- Codeforces Round #694 (Div. 2) F. Strange Housing (贪心思维)
F. Strange Housing 题意 有 nnn 个点和 mmm 条边,对点进行染色.要求一条边的两个点不能都染色,并且删除两端都没有染色的边之后,图连通.请给出一种染色方案. 题解 暴力贪心即 ...
- 【记录CF】Codeforces Round #777 (Div. 2) A~C 题解
目录 杂谈 A. Madoka and Math Dad B. Madoka and the Elegant Gift C. Madoka and Childish Pranks 杂谈 又是一场离谱掉 ...
最新文章
- C语言中的union
- 【软考-软件设计师】程序设计语言基础知识框架
- js实现线路流动_52期:实现redux与reactredux
- [转] Apache日志分析常用Shell命令
- SAP Spartacus storefrontapp不是运行在简单的tomcat服务器上
- linux 对于Vim配置的方法
- Windows下Weblogic 12c单机安装与部署
- matlab计数器清零,51单片机计数器清零
- 菜鸟学习Spring——SpringMVC注解版解析不同格式的JSON串
- 案例33:灭火器及其配置验收案例分析
- [BZOJ]4199: [Noi2015]品酒大会(后缀数组+笛卡尔树)
- 上证指数ARIMA模型预测(R软件)
- 基于SSM+Layui图书借阅管理系统设计
- 柳下惠_拔剑-浆糊的传说_新浪博客
- KT6368A蓝牙转HID键盘_蓝牙ibeacon模块方案测试板使用说明
- 将yolo格式数据集转换为coco格式数据集
- vue 实现ps图片编辑_Vue项目图片剪切上传——vue-cropper的使用
- Android可上下左右滑动的列表
- 服务器防火墙软件 —— iptables
- Java中的不可变集合介绍