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) 部分简要题解相关推荐

  1. Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #694 (Div. 1 + Div2)(A ~ ...

  2. Codeforces Round #694 Div. 2

    Codeforces Round #694 Div. 2 CodeForces 1471A Strange Partition CodeForces 1471B Strange List CodeFo ...

  3. (6/6) Codeforces Round #694 (Div. 2)

    (6/6) Codeforces Round #694 (Div. 2) A. Strange Partition 题意: 给一个数组,数组中的所有元素可以任意合并,求数组的每个元素除以x上去整的和, ...

  4. Codeforces Round #198 (Div. 2)A,B题解

    Codeforces Round #198 (Div. 2) 昨天看到奋斗群的群赛,好奇的去做了一下, 大概花了3个小时Ak,我大概可以退役了吧 那下面来稍微总结一下 A. The Wall Iahu ...

  5. 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≤ ...

  6. 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 ...

  7. 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 ...

  8. Codeforces Round #694 (Div. 2) F. Strange Housing (贪心思维)

    F. Strange Housing 题意 有 nnn 个点和 mmm 条边,对点进行染色.要求一条边的两个点不能都染色,并且删除两端都没有染色的边之后,图连通.请给出一种染色方案. 题解 暴力贪心即 ...

  9. 【记录CF】Codeforces Round #777 (Div. 2) A~C 题解

    目录 杂谈 A. Madoka and Math Dad B. Madoka and the Elegant Gift C. Madoka and Childish Pranks 杂谈 又是一场离谱掉 ...

最新文章

  1. C语言中的union
  2. 【软考-软件设计师】程序设计语言基础知识框架
  3. js实现线路流动_52期:实现redux与reactredux
  4. [转] Apache日志分析常用Shell命令
  5. SAP Spartacus storefrontapp不是运行在简单的tomcat服务器上
  6. linux 对于Vim配置的方法
  7. Windows下Weblogic 12c单机安装与部署
  8. matlab计数器清零,51单片机计数器清零
  9. 菜鸟学习Spring——SpringMVC注解版解析不同格式的JSON串
  10. 案例33:灭火器及其配置验收案例分析
  11. [BZOJ]4199: [Noi2015]品酒大会(后缀数组+笛卡尔树)
  12. 上证指数ARIMA模型预测(R软件)
  13. 基于SSM+Layui图书借阅管理系统设计
  14. 柳下惠_拔剑-浆糊的传说_新浪博客
  15. KT6368A蓝牙转HID键盘_蓝牙ibeacon模块方案测试板使用说明
  16. 将yolo格式数据集转换为coco格式数据集
  17. vue 实现ps图片编辑_Vue项目图片剪切上传——vue-cropper的使用
  18. Android可上下左右滑动的列表
  19. 服务器防火墙软件 —— iptables
  20. Java中的不可变集合介绍

热门文章

  1. 华为服务器XH628配置软RAID
  2. vant中遍历本地图片路径写法
  3. Eclipse 安装 Jrebel插件
  4. 号称解决勒索病毒的安全公司,其实暗地里跪着给黑客送赎金。。。
  5. excel中用正则匹配_Excel利用正则表达式匹配和替换内容
  6. python正则表达式替换excel_在 Excel 中使用正则表达式进行查找与替换
  7. newman执行测试_newman执行postman脚本
  8. 微信公众平台开发——腾讯地图导航
  9. 【Docker学习笔记 五】深入理解Docker容器数据卷机制
  10. 基于Matlab/Simulink的简单三相交流系统扫频仿真