这场A是最失误的地方 能int读入 却用char数组读入 感觉失策了

A

题意 给你开始时间和结尾时间 问你这两个时间的中间时间是什么

做法 做法显然 骚操作在此

#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#include <vector>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define dbg(x) cout<<#x<<" = "<< (x)<< endl
#define dbg2(x1,x2) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<endl
#define dbg3(x1,x2,x3) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<" "<<#x3<<" = "<<x3<<endlint main()
{int t1,f1,t2,f2;scanf("%d:%d",&t1,&f1);scanf("%d:%d",&t2,&f2);int tim1 = t1*60+ f1;int tim2 = t2*60 + f2;int jian = (tim2 - tim1)/2;tim1 += jian;printf("%02d:%02d\n",tim1/60,tim1%60);return 0;
}

B

题意 给你n个数 问你能分成几组能整除k

做法 我们把所有数mod k 那么就得到k 组数 就可以通过性质 做了 注意 i 如果等于 k-i 则需要取一般 而不是min

#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#include <vector>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define dbg(x) cout<<#x<<" = "<< (x)<< endl
#define dbg2(x1,x2) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<endl
#define dbg3(x1,x2,x3) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<" "<<#x3<<" = "<<x3<<endl
int a[200025],cnt[200];int main()
{int n,k;scanf("%d%d",&n,&k);for(int i = 1;i<=n;++i)scanf("%d",&a[i]),a[i]%=k,cnt[a[i]]++;long long ans = 0;for(int i = 0;i<k/2+1;i++){if(i==0){ans+=cnt[i]/2;cnt[i]%=2;}else{if(k-i==i){ans+=cnt[i]/2;cnt[i]%=2;}else{long long minn = min(cnt[i],cnt[k-i]);ans = ans+minn;//dbg(minn);cnt[i]-=minn;cnt[k-i]-=minn;}}}printf("%lld\n",ans*2);return 0;
}

C

题意 给你n个人的能力值 问你分组 使得最大能力值的人减去最小能力值的人差不大于5 一组最多有多少人

做法 尺取即可

#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#include <vector>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define dbg(x) cout<<#x<<" = "<< (x)<< endl
#define dbg2(x1,x2) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<endl
#define dbg3(x1,x2,x3) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<" "<<#x3<<" = "<<x3<<endl
const int MAX_N = 200025;
int arr[MAX_N];
int main()
{int n,minn,maxx,ans=1;scanf("%d",&n);for(int i = 1;i<=n;++i)  scanf("%d",&arr[i]);sort(arr+1,arr+1+n);for (int l=1,r=1,now=0;l<=n;){while(arr[r]-arr[l]<=5&&r<=n){r++;}ans = max(r-l,ans);l++;}printf("%d\n",ans);return 0;
}

D

题意 给你n组 a[i] 和 b[i] 问你使得 k*a[i] + b[i] = 0 同时满足条件最多的时候k是多少

做法 一开始的做法是b[i]/a[i] 存在map里面找最大 注意如果a[i] 等于 0 此时分两种 如果a[i] b[i] 同时为0 那么另外记录tmp++(最终答案加上tmp) 如果a[i] 为0 b[i]不为0 则无法实现 一开始会丢精度 尤其是

2

999999999 999999998

1000000000 999999999

这组数据 后来改成long double 过了 实际上想到了gcd分解 但是没有处理好负号 这题用一个 pair的map存是一个小trick

值得大家学习

#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#include <vector>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define dbg(x) cout<<#x<<" = "<< (x)<< endl
#define dbg2(x1,x2) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<endl
#define dbg3(x1,x2,x3) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<" "<<#x3<<" = "<<x3<<endl
const int MAX_N = 200025;
double arr[MAX_N],arr_[MAX_N];
map<long double,int> mp;
int main()
{int n,ans = 0,cnt = 0;scanf("%d",&n);for(int i =1;i<=n;++i){scanf("%lf",&arr[i]);}for(int i = 1;i<=n;++i){scanf("%lf",&arr_[i]);if(arr[i]==0&&arr_[i]!=0) continue;if(arr[i]==0&&arr_[i]==0){cnt++;continue;}//printf("%.15Lf\n",(long double)arr_[i]/arr[i]);mp[(long double)(long double)arr_[i]/arr[i]]++;ans = max(ans,mp[(long double)arr_[i]/arr[i]]);}printf("%d\n",ans+cnt);return 0;
}

E

延续着C题的题意 问你能组成那么多符合的组 取k个会有多少人被组

首先排个序 这样就可以二分了

dp[i][j] 代表前i个人已经组了k组的情况 容易想到转移式为

dp[i][j] =max(dp[i-1][j],dp[i][j-1],dp[x-1][j-1]+i-x+1) x为第i个作为最高值组队的最小值的坐标

#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#include <vector>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define dbg(x) cout<<#x<<" = "<< (x)<< endl
#define dbg2(x1,x2) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<endl
#define dbg3(x1,x2,x3) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<" "<<#x3<<" = "<<x3<<endl
const int MAX_N = 5040;
int a[MAX_N],dp[MAX_N][MAX_N];
int main()
{int n,k;scanf("%d%d",&n,&k);for(int i = 1;i<=n;++i){scanf("%d",&a[i]);}sort(a+1,a+1+n);for(int i = 1;i<=n;++i){for(int j = 1;j<=min(i,k);j++){dp[i][j] = max(dp[i][j-1],dp[i-1][j]);int pos = lower_bound(a+1,a+1+n,a[i]-5)-a;dp[i][j] = max(dp[i][j],dp[pos-1][j-1]+i-pos+1);}}printf("%d\n",dp[n][k]);return 0;
}

F1

题意 给你n个点 m条边 问你能输出一种生成树(保证存在) 使得最大度数点最大

做法 我们把最大度数点找到 然后连边 把剩下的点跑一个最小生成树即可

#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#include <vector>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define dbg(x) cout<<#x<<" = "<< (x)<< endl
#define dbg2(x1,x2) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<endl
const int MAX_N = 200025;
const int MAX_M = 400025;
int eid ,fa[MAX_N],a[MAX_N],cnt[MAX_N],b[MAX_N];
vector<int > vt[MAX_N];
struct node_
{int x,y;
}ans_[MAX_N];
struct node
{int u,v,w;bool operator< (const node &a) const{return w < a.w;}
}e[MAX_M];int get(int x)
{if(fa[x]==x) return x;return fa[x] = get(fa[x]);
}
void Merge(int x,int y)
{x = get(x),y = get(y);if(x!=y){fa[x] = y;}return ;
}
int main()
{int n,m,maxx =-1,maxx_i;scanf("%d%d",&n,&m);for(int i = 1;i<=m;++i){scanf("%d%d",&a[i],&b[i]);e[eid].u = a[i];e[eid++].v = b[i];e[eid].u = b[i];e[eid++].v = a[i];vt[a[i]].push_back(b[i]);vt[b[i]].push_back(a[i]);cnt[a[i]]++;cnt[b[i]]++;}for(int i = 1;i<=n;++i){if(cnt[i]>maxx){maxx = cnt[i];maxx_i = i;}}int sz = vt[maxx_i].size();for(int i = 1;i<=n;++i)fa[i] = i;int mst = n;for(int i = 0;i<sz;++i){int x = get(maxx_i),y = get(vt[maxx_i][i]);ans_[n-mst].x = maxx_i;ans_[n-mst].y = vt[maxx_i][i];mst--;Merge(x,y);}for(int i = 0;i<eid&&mst>1;i++){int x = get(e[i].u),y = get(e[i].v);if(x==y) continue;if(x!=y){ans_[n-mst].x = e[i].u;ans_[n-mst].y = e[i].v;Merge(x,y);mst--;}}for(int i = 0;i<n-1;i++)printf("%d %d\n",ans_[i].x,ans_[i].y);return 0;
}

F2

接着上一题 不过有个k 就是问你1这个点需要有k的度数

我们怎么做呢?首先排除a 处理出所有的联通块 如果联通块个数大于k 那么就是NO 如果小于k 我们要把所有联通块和1连边 然后再连和1相连的边 知道k为0 然后再把所有联通快连边即可

代码实现的顺序分别是 先连1和联通快 -> 再补度数 ->再连联通快内部的

#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#include <vector>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define dbg(x) cout<<#x<<" = "<< (x)<< endl
#define dbg2(x1,x2) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<endl
#define dbg3(x1,x2,x3) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<" "<<#x3<<" = "<<x3<<endl
const int MAX_N = 200025;
int tot;
vector<int > one[MAX_N],dsu[MAX_N];
bool vis[MAX_N];
vector<pair<int ,int > > ans;
vector<int > vt[MAX_N];
void dfs(int x)
{vis[x] = true;dsu[tot].push_back(x);int sz = vt[x].size();for(int i = 0;i<sz;++i){if(vis[vt[x][i]]) continue;if(vt[x][i]==1){one[tot].push_back(x);continue;}dfs(vt[x][i]);}
}
int main()
{int n,m,k,a,b,cnt = 0;scanf("%d%d%d",&n,&m,&k);for(int i = 1;i<=m;++i){scanf("%d%d",&a,&b);if(a==1||b==1) cnt++;vt[a].push_back(b);vt[b].push_back(a);}if(cnt<k){printf("NO\n");return 0;}for(int i = 2;i<=n;++i){if(!vis[i]){tot++;dfs(i);}}if(tot>k){printf("NO\n");return 0;}queue<int > q;memset(vis,0,sizeof(vis));vis[1] = true;for(int i = 1;i<=tot;i++){//dbg(one[i].back());ans.push_back(make_pair(1,one[i].back()));vis[one[i].back()] = true;q.push(one[i].back());one[i].pop_back();k--;}for(int i = 1;i<=tot;++i){while(k>0&&one[i].size()){ans.push_back(make_pair(1,one[i].back()));vis[one[i].back()] = true;q.push(one[i].back());one[i].pop_back();k--;}}while(!q.empty()){int tmp = q.front();//dbg(tmp);q.pop();for(int i = 0;i<vt[tmp].size();i++){if(!vis[vt[tmp][i]]){//dbg2(tmp,vt[tmp][i]);vis[vt[tmp][i]] = true;ans.push_back(make_pair(tmp,vt[tmp][i]));q.push(vt[tmp][i]);}}}printf("YES\n");for(int i = 0;i<n-1;i++)printf("%d %d\n",ans[i].first,ans[i].second);return 0;
}

【Codeforces Round #544 (Div. 3)】 A B C D E F1 F2相关推荐

  1. 【Codeforces Round #560 (Div. 3)】 A B C D E F1 F2

    cf560 A 题意 给你一个 2e5的01串 和 x y要求这个串%10^x = 10 ^ y 那么按照题意模拟 都变成0 那位变成1 即可 /*if you can't see the repay ...

  2. 【Codeforces Round #547 (Div. 3)】 A B C D E F1 F2 G

    A 题意 问你从一个n 到 m 经过多少次数 *2 *3能到m 所以特判一下m能否整除n  然后除了以后根据奇偶去判断求次数 #include <cstdio> #include < ...

  3. 【Codeforces Round #767 (Div. 2)】 C. Meximum Array 题解

    [Codeforces Round #767 (Div. 2) ]C. Meximum Array 题解 1629C: Meximum Array 题解 [Codeforces Round #767 ...

  4. C1. Make Nonzero Sum (easy version)【Codeforces Round #829 (Div. 2】

    Codeforces Round #829 (Div. 2)中C1题目 Codeforces比赛记录 文章目录 题目链接: 一.C1. Make Nonzero Sum (easy version) ...

  5. Codeforces Round #739 (Div. 3) 「A B C D E F1 F2」

    Codeforces Round #739 (Div. 3) A. Dislike of Threes 题目描述: 如果一个数能被3整除或者十进制结尾的数字是3则是无趣的数,你想知道第n个有趣的数是什 ...

  6. 【Codeforces Round #544 (Div. 3) F2. Spanning Tree with One Fixed Degree】DFS

    F2. Spanning Tree with One Fixed Degree 题意 给你nnn个点mmm条边的无向联通图,找出一棵生成树,使111这个点的度=d=d=d. 1≤n,m≤1051 \l ...

  7. 【Codeforces Round #548(Div. 2)】Edgy Trees(数学+bfs求连通块)

    题目链接 C. Edgy Trees time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  8. 【Codeforces Round #525(Div. 2)】Ehab and another another xor problem(思维+异或)

    题目链接 D. Ehab and another another xor problem time limit per test 1 second memory limit per test 256 ...

  9. 【Codeforces Round#618 (Div. 2)】C. Anu Has a Function 题解

    题目链接:C. Anu Has a Function 题目 Anu has created her own function f: f(x,y)=(x|y)−y where | denotes the ...

最新文章

  1. char几个字节java_java中的char占几个字节实例分析
  2. GdiPlus[28]: IGPPen: 建立复合画笔
  3. [攻防世界 pwn]——pwn1(内涵peak小知识)
  4. 再译《A *路径搜索入门》之四
  5. python正则获取网页标签里面的内容
  6. 兼容各种浏览器的自动左右滚动兼左右点击滚动代码
  7. 检测到目标url存在内部ip地址泄露_Cendertron,动态爬虫与敏感信息泄露检测
  8. WPF 3D模型的一个扩展方法
  9. 当世界从移动优先变为AI优先,未来企业竞争将赢在“维度”
  10. UVA455 Periodic Strings【水题】
  11. border-radius的8个属性值_画半圆、叶子等
  12. 基于2018年世界杯赛事法国队夺冠进球数据分析
  13. Data Recovery Strategy Determines Backup Strategy【每日一译】--2012-11-11
  14. .Net学习平台有很多,最快捷的是在这里?
  15. Python读取和写入excel文件
  16. 单片机c语言idata什么意思,单片机C语言中的data,idata,xdata,pdata,code
  17. Power oj 2781: 上决╇ф的黑科技 (任意模数NTT|拆系数FFT)
  18. oracle修改open_cursors,oracle的open_cursors问题探究
  19. 如何进行图片局部转TXT文档
  20. Manifest merger failed with multiple errors, see logs问题处理

热门文章

  1. 报错:工作中心缺少公式CK430-PS
  2. 解密体育背后AI黑科技:花样滑冰动作识别、多模视频分类和精彩片段剪辑
  3. 合资车型挂牌价20万以内带锁全时四驱 长安铃木维特拉越开越上瘾
  4. 「Unity2D」使用Unity创建一个2D游戏系列-8
  5. java异常重要吗_Java 异常处理的重要认识
  6. 关于初学者用哪种C/C++编译器(集成开发环境)的问题
  7. 20165326 学习基础和c语言基础调查
  8. 05机器学习--多项式回归与模型泛化及python实现
  9. word设置多级混合标题
  10. 购物车详情 图片切换