contest链接:https://codeforces.com/contest/1283

A. Minutes Before the New Year

题意:给一个当前时间,输出离第二天差多少分钟

思路:略

AC代码:

 #include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
const int mod = 1e9+;
const int maxn = 1e5+;
typedef long long ll;
int main(){
int t;
cin>>t;
while(t--){
int h,m;cin>>h>>m;
h = - h,m = - m;
cout<<(h)*+m<<endl;
}
return ;
}

B. Candies Division

题意:  给每个人分糖果,得到糖果数最多的人的糖果数与得到糖果数最少的人的数量之差不能大于一。并且得到糖果数量最多的人不得多于人数的一半。

思路:略

AC代码:

 #include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
const int mod = 1e9+;
const int maxn = 1e5+;
typedef long long ll;
int main(){
int t;
cin>>t;
while(t--){
ll n,k;cin>>n>>k;
ll t = n/k;
ll d = n - t*k;
ll t1 = min(k/,d);
cout<<t*k+t1<<endl;
}
return ;
}

C. Friends and Gifts

题意:每个人都要给其他一个人一个礼物,并且每个人都要收到一个礼物。请你设计一种合法的赠送礼物的方法,使得每个人都赠送非自己的人一个礼物,并且从其他人那里收到一个礼物。

题解:最终合法的方法是若干个有向环,输入的时候存每个人的出度和入度,出度表示赠送礼物,入度表示接收礼物,最终保证每个人的出入度都是1。再输入统计完之后首先排除掉构成环的所有人,因为他们已经满足题意要求。再者是既没有得到礼物,又没有赠送礼物的人,即出入度都是0,然后让他们互相连接起来,记作集合R,最终让入度为1出度为0的人连接集合R,集合R中进行操作过后,留下一个人出度为0,再让这个人连接最后一个出度为1,入度为0的人,总体构成一个环即可。

AC代码:

 #include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
const int mod = 1e9+;
const int maxn = 2e5+;
typedef long long ll;
struct node{
int in;
int out;
}g[maxn]; int main(){
int n;
cin>>n;
for(int i = ;i<=n;i++){
g[i].in = ;
}
for(int i = ;i<=n;i++) {
int t;cin>>t;
g[i].out = t;
g[t].in = i;
}
int start = -,end = -;
vector<int> v ,vIn,vOut;
for(int i = ;i<=n;i++){
if(g[i].in != && g[i].out == ) vOut.push_back(i);
if(g[i].in == && g[i].out != ) vIn.push_back(i);
if(g[i].in == && g[i].out == ) v.push_back(i);
}
if(v.size() > ){
start = v[],end = v[v.size() -];
int first = v[];
for(int i = ;i<v.size() -;i++){
g[start].out = v[i];
start = v[i];
}
g[start].out = end;
g[end].out = first;
}
if(v.size() == ){
int t = vOut[vOut.size() -];
g[t].out = v[];
g[v[]].in = t;
vOut.pop_back() ;
vOut.push_back(v[]);
}
for(int i = ;i<vOut.size() ;i++){
int cur = vOut[i],next = vIn[i];
g[cur].out = next; }
for(int i = ;i<=n;i++){
cout<<g[i].out <<" ";
}
return ;
}

D. Christmas Trees

题意:给定n个不同的整数点,让你找m个不同的整数点,使得这m个点到到这n个点最小距离之和最小。

思路:贪心一下,首先每个点的x+1和x-1两个坐标到这个点的距离是最短的,之后是x+2,x-2,再之后是x+3,x-3,那么可以想到bfs,首先把n个点存入队列中,找与他们距离为1的点,之后再bfs距离为2的点,如此这个过程直到找到m个点

AC代码:

 #include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<map>
using namespace std;
const int mod = 1e9+;
const int maxn = 2e5+;
typedef long long ll;
queue<pair<int,int> > q;
map<int,bool> vis;//用map记录是否访问过
vector<int> v;
int main(){
int n,m;cin>>n>>m;
while(n--){
int t;cin>>t;
vis[t] = ;
q.push({,t+}),q.push({,t-}); //首先存距离为1的点
}
ll ans = ;
while( m> && !q.empty() ){
pair<int,int> cur = q.front() ;
q.pop() ;
if(vis[cur.second]!=){//如果没有遍历过
m--;
v.push_back(cur.second );
ans+=cur.first;
vis[cur.second] = ;
if(vis[cur.second+] != ) q.push({cur.first+,cur.second+});//距离+1,入队列
if(vis[cur.second-] != )q.push({cur.first+,cur.second-}); //同上
}
}
cout<<ans<<endl;
for(int i = ;i<v.size() ;i++){
cout<<v[i]<<" ";
}
return ;
}

E. New Year Parties

题意: 有n个人住在一些房子里,有的人住在同一个房子里。每个人可以选择搬去他的房子左边那个房子或者右边那个房子,亦或是不搬,搬只能向左或向右移动一次。问这些人最少住几个房子和最多住几个房子。

题解:贪心。最小值就是三人聚合起来,聚合在一个房子。最大值就是贪心地尽可能地向空房子移动

AC代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn = 2e5+ ;
int x[maxn];
int s[maxn];
int main(){
int n;cin>>n;
for(int i = ;i<n;i++){
int t;cin>>t;
x[t] ++;
s[t] ++;
}
int mx = ,mi = ;
for(int i = ;i<=n+;i++){//求最大值
if(x[i] == ) continue;//当前为0,没人住就跳过
if(x[i-] == ){//前一个房子为空,就移动过一个人,占一个房子
x[i]--;
x[i-]++;
}
if(x[i]>){//往前一个房子移动过一个人后,如果还有多余的人能再移动,就尽可能再往后面的房子移动
x[i+]++;
x[i]--;
}
}
for(int i = ;i<=n+;i++){
if(x[i]!=) mx++;
}
vector<int> v;
int f = ,cur = ;
for(int i = ;i<=n;i++){
if(s[i] != ){//如果当前房子有人,那么房子+1和-1地方的人都聚合过来,每三个人跳转一次
mi++;
i+=;//直接跳转
}
}
cout<<mi<<" "<<mx;
return ;
}

F. DIY Garland

题意:一根电线连接着两个点,这两个点分别代表着两个灯,灯有自己的编号i,其亮度是2 ^ i,每根电线的两个灯分别为主灯和副灯,电源从主灯来,电流向副灯。最开始有一个源点灯,所有的电源从此处流入,对于每根电线,定义其重要性为 :切断这根电线后不能通电的所有灯的亮度之和。首先题目按电线的重要性给出n-1条电线的主灯编号,让你从大到小输出每条电线所连接的两个灯的序号(无前后差别)

题解:首先,题目的所描述的结构是一棵树,因为题目是按电线重要性给出的节点主灯,那么第一个节点必定是源点,因为重要性最大。其次因为树的叶子节点度必为1,而且叶子节点必定不是主灯,那么我们可以在输入之后统计叶子节点,同时统计一下输入节点的度。叶子节点的编号用优先队列存储,因为亮度最小最先和重要性低的电线匹配。因为输入的时候电线是按重要性从大到小输入的,那么我们就可以把优先队列中的节点一个一个地与其父亲节点(主灯)匹配,匹配过后,让当前这个主灯的度-1,如果这个此时度变为1,那么加入到优先队列之中,因为他现在成了“叶子节点”,如此过程直到把n-1条边都找到,break即可

AC代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 2e5+;
int ind[maxn];
vector<pair<int,int> > ans;
int main(){
int n;
cin>>n;
priority_queue<int, vector<int>,greater<int> > q;
vector<int> mainLamp;
int gird = -;
for(int i = ;i<n-;i++){
int lamp;
cin>>lamp;
if(gird == -) gird = lamp;//记录源点
ind[lamp]++;//记录度
mainLamp.push_back(lamp);
}
for(int i = ;i<=n;i++){
if(ind[i] == ){//寻找未出现的叶子节点
q.push(i);
}
}
while(!q.empty() ){
int cur = q.top();
q.pop();
int curMainLamp = mainLamp[mainLamp.size()-];
mainLamp.pop_back();//匹配一个主灯,就弹出一个
ans.push_back({curMainLamp,cur});//加入一条边
if(ans.size() == n - ) break;
ind[curMainLamp]--;
if(ind[curMainLamp] == ){
q.push(curMainLamp);//如果度为0,那么变成了叶子节点,加入队列中
}
}
cout<<gird<<endl;
for(int i = ans.size() -;i>= ;i--){
cout<<ans[i].first<<" "<<ans[i].second<<endl;
}
return ;
}

Codeforces Round #611 (Div. 3) A-F简要题解的更多相关文章

  1. Codeforces Round #609 (Div. 2)前五题题解

    Codeforces Round #609 (Div. 2)前五题题解 补题补题…… C题写挂了好几个次,最后一题看了好久题解才懂……我太迟钝了…… 然后因为longlong调了半个小时…… A.Eq ...

  2. Codeforces Round #573 (Div. 1) 差F

    Codeforces Round #573 (Div. 1) E 题意:二维平面上有 n 个点,你可以放至多 m 条直线使得 (0,0) 与每个点的连线至少与一条直线相交.求原点与所有直线的距离最小值 ...

  3. Codeforces Round #541 (Div. 2) (A~F)

    目录 Codeforces 1131 A.Sea Battle B.Draw! C.Birthday D.Gourmet choice(拓扑排序) E.String Multiplication(思路 ...

  4. Codeforces Round #532 (Div. 2):F. Ivan and Burgers(贪心+异或基)

    F. Ivan and Burgers 题目链接:https://codeforces.com/contest/1100/problem/F 题意: 给出n个数,然后有多个询问,每次回答询问所给出的区 ...

  5. Codeforces Round #611 (Div. 3)

    原题面:https://codeforces.com/contest/1283 A.Minutes Before the New Year 题目大意:给定时间,问距离零点零分还有多久? 分析:注意一下 ...

  6. Codeforces Round #600 (Div. 2)E F

    题:https://codeforces.com/contest/1253/problem/E 题意:给定n个信号源,俩个参数x和s,x代表这个信号源的位置,s代表这个信号源的波及长度,即这个信号源可 ...

  7. Codeforces Round #346 (Div. 2) E F

    因为很久没有个人认真做题了 昨天晚上开了场虚拟cf来锻炼个人手速 选的是第一次做cf的场 那时候7出3还被hack...之后也没补题 这次做的时候顺便回忆了一下以前比赛的时候是怎么想的 发现经验还是很 ...

  8. Codeforces Round #322 (Div. 2) E F

    E. Kojiro and Furrari 题意说的是 在一条直线上 有n个加油站, 每加一单位体积的汽油 可以走1km 然后每个加油站只有一种类型的汽油,汽油的种类有3种 求从起点出发到达终点要求使 ...

  9. Codeforces Round #506 (Div. 3) 1029 F. Multicolored Markers

    CF-1029F 题意: a,b个小正方形构造一个矩形,大小为(a+b),并且要求其中要么a个小正方形是矩形,要么b个小正方形是矩形. 思路: 之前在想要分a,b是否为奇数讨论,后来发现根本不需要.只 ...

随机推荐

  1. 【NLP】暑假课作业1 - 中文分词(前向匹配算法实现)

    作业任务: 使用98年人民日报语料库进行中文分词训练及测试. 作业输入: 98年人民日报语料库(1998-01-105-带音.txt),用80%的数据作为训练集,20%的数据作为验证集. 运行环境: ...

  2. JSP+Servlet+Ajax实现用户增删改查的例子

    一.数据库设计 用户表User 已有的测试数据 二.Java代码编写 Java EE的架构一般分为以下五层: ①.Domain ②.DAO ③.Service ④.Controller ⑤.View ...

  3. 移动Web开发-WebApp(flex布局+移动端导航案例)

    实际开发中的像素:css像素设备像素比dpr=设备像素/css像素标清屏dpr=1 高清屏dpr=2缩放改变的是css像素大小PPI(每英寸的物理像素点)=根号(屏幕横向分辨率²+屏幕纵向分辨率²)/ ...

  4. LeetCode 9、判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

    class Solution: def isPalindrome(self, x: int) -> bool: a = x if a<0: return False else: num = ...

  5. TCP 协议快被淘汰了,UDP 协议才是新世代的未来?

    TCP 协议可以说是今天互联网的基石,作为可靠的传输协议,在今天几乎所有的数据都会通过 TCP 协议传输,然而 TCP 在设计之初没有考虑到现今复杂的网络环境,当你在地铁上或者火车上被断断续续的网络折 ...

  6. openssl 生成免费证书

    原文链接:https://www.cnblogs.com/tugenhua0707/p/10927722.html 一:什么是openssl? 它的作用是?应用场景是什么? 即百度百科说:openss ...

  7. vjudge A Funny Game 思维题 (其实今天讲的全是数学。。。)

    原文链接https://vjudge.net/contest/331993#problem/H Alice and Bob decide to play a funny game. At the be ...

  8. Latex中遇到 No room for a new \count 问题的解决

    在tex文件中加入etex宏包. \usepackage{etex} 最好加载第一个宏包位置 PDF合并 \documentclass[a4paper]{article}\usepackage{pdf ...

  9. 关于Euler-Poisson积分的几种解法

    来源:https://www.cnblogs.com/Renascence-5/p/5432211.html 方法1:因为积分值只与被积函数和积分域有关,与积分变量无关,所以\[I^{2}=\left ...

  10. Windows中配置maven环境变量

    添加maven环境变量 添加新的系统环境变量:MAVEN_HOME 设置其值为你安装的目录:D:\IT_program\apache-maven-3.6.0 更新系统PATH 变量 添加变量值:%MA ...