codeforces Round #611
这种凌晨场真的折寿
就过了四题,8wa结尾心态炸裂,求别被hack,再hack就要爬了
A2 B8 C38(1) E1:58(7)
D题感觉可以写,但是没有时间看了。幸好E最后发现了自己的错误。
A题:看到题的时候感觉好温馨,算时间,感动到了
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<set>
#include<map>
#include<queue>
#include<vector>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define mod 1000000007
const int maxn=1e5+;
int main()
{
int t;
scanf("%d",&t);
while(t--){
int n,m;
cin>>n>>m;
int sum=-m+(-n)*;
printf("%d\n",sum);
}
return ;
}
B题:看到题的那一刻,又感动到了
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<set>
#include<map>
#include<queue>
#include<vector>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define mod 1000000007
const int maxn=1e5+;
int main()
{
int t;
scanf("%d",&t);
while(t--){
int n,m;
cin>>n>>m;
int zx=n/m,ge=m/;
int sheng=n-zx*m;
if(sheng>=ge){
printf("%d\n",zx*m+ge);
}
else{
printf("%d\n",zx*m+sheng);
}
}
return ;
}
C题:这题是hack最多的 QAQ求求求了别注意到我
题意:给n个数字,0或者1~n之间,把0替换成1~n中没出现过的,同时满足不等于它所在的位置下标
思路:暴力……?感觉自己要被hack的……但算了算复杂度没超
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<set>
#include<map>
#include<queue>
#include<vector>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define mod 1000000007
const int maxn=2e5+;
int a[maxn],pos[maxn]={},p[maxn];
int main()
{
int n;
queue<int>q;
scanf("%d",&n);
int t=;
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
if(!a[i]){
p[t++]=i;
}
else{
pos[a[i]]=;
}
}
for(int i=;i<=n;i++){
if(!pos[i]){q.push(i);}
}
for(int i=;i<t-;i++){
int wei=q.front();q.pop();
if(wei!=p[i]){
a[p[i]]=wei;
}
else{
q.push(wei);
wei=q.front();q.pop();
a[p[i]]=wei;
}
}
int wei=q.front();q.pop();int wei2=q.front();
if(p[t-]!=wei && p[t-]!=wei2){
a[p[t-]]=wei;a[p[t-]]=wei2;
}
else{
a[p[t-]]=wei;a[p[t-]]=wei2;
}
for(int i=;i<=n;i++){
printf(i==n?"%d\n":"%d ",a[i]);
}
return ;
}
E题:这是我wa最多,花时间找错误最多的
题意:给一个n,输入n个数(1~n),代表人所在的房子序号,人可以左右移动一格或者不动,但只能移动一次。问最小,最多的可以住不同的房子
思路:缩小,扩大,扩大考虑房子序号出现次数1次,2次,大于等于3次,优先考了右边,然后是不动,再是左边。缩小,遇到房子序号出现次数为0的跳过,遇到不是0的,考虑111,101,110,100四种情况即可。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<set>
#include<map>
#include<queue>
#include<vector>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define mod 1000000007
const int maxn=2e5+;
int a[maxn]={},vis[maxn]={},pos[maxn]={},k;
int main()
{
int n;
int sum=,ans=;
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%d",&k);
pos[k]++;
vis[k]++;
}
for(int i=;i<=n;i++){
if(pos[i]==){
if(!a[i-]){a[i-]=;}
else if(!a[i]){a[i]=;}
else if(!a[i+]){a[i+]=;}
}
else if(pos[i]==){
if(!a[i-]){
a[i-]=;
if(!a[i]){a[i]=;}
else if(!a[i+]){a[i+]=;}
}
else{
a[i]=;
a[i+]=;
}
}
else if(pos[i]>=){
a[i]=;a[i-]=;a[i+]=;
}
}
for(int i=;i<=n+;i++){if(a[i]){sum++;}}
for(int i=;i<=n;i++){
if(vis[i] && vis[i+] && vis[i+]){
ans++;i=i+;
}
else if(vis[i] && vis[i+] && !vis[i+]){
ans++;i=i+;
}
else if(vis[i] && !vis[i+] && vis[i+]){
ans++;i=i+;
}
else if(vis[i] && !vis[i+] && !vis[i+]){
ans++;i=i+;
} }
printf("%d %d\n",ans,sum);
return ;
}
D和F等期末考完再补吧。希望期末全过啊
upd
补题D题:
题意:给n个树的位置,求m个人离树最小的距离之和
思路:往外扩,bfs
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<set>
#include<map>
#include<queue>
#include<vector>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define mod 998244353
const int maxn=2e5+;
struct node{
int n,m;
node(){}
node(int nn,int mm):n(nn),m(mm){}
};
map<int,bool>vis;
queue<node>q;
int pos[maxn],t=,n,m,k;
ll bfs(){
ll ans=;
while(m> && !q.empty()){
node tk=q.front();q.pop();
if(!vis[tk.n]){
ans+=(ll)tk.m;pos[t++]=tk.n;m--;vis[tk.n]=;
q.push(node(tk.n+,tk.m+));
q.push(node(tk.n-,tk.m+));
}
}
return ans;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<n;i++){
scanf("%d",&k);
vis[k]=;q.push(node(k+,));q.push(node(k-,));
}
printf("%lld\n",bfs());
for(int i=;i<t;i++){
printf(i==t-?"%d\n":"%d ",pos[i]);
}
return ;
}
前几天一直练搜索题……比赛时候搜索题题目都没看……
F题的题意有点难懂
就是给n个1~n的点,第i个点的价值是2^i(0<i<n+1),每个点链接的线,有一个主点和副点,主点的价值等于主点的价值加上其所有的副点价值(包含副点的副点价值等等)
给n-1个数字a,代表价值从大到小的主点位置,求线段两点的价值从大到小的位置
题解,感觉有点像拓扑排序,入度点,并且要求小的先出,所以用优先队列
还是看了别人的题解写的,呜呜呜,题意根本没读懂
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<set>
#include<map>
#include<queue>
#include<vector>
#include<queue>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define mod 998244353
const int maxn=2e5+;
int vis[maxn],du[maxn],a[maxn];
vector<pair<int,int> > v;
priority_queue<int,vector<int>,greater<int> >q;
int n;
int main()
{
cin>>n;
for(int i=;i<n;i++){
cin>>a[i];
vis[a[i]]=,du[a[i]]++;
}
for(int i=;i<=n;i++){
if(!vis[i]){q.push(i);}
}
for(int i=n-;i;i--){
int t=q.top();q.pop();
du[a[i]]--;
v.push_back(make_pair(t,a[i]));
if(!du[a[i]]){q.push(a[i]);}
}
printf("%d\n",a[]);
for(int i=n-;i>=;i--){
printf("%d %d\n",v[i].first,v[i].second);
}
return ;
}
codeforces Round #611的更多相关文章
- Codeforces Round #611 (Div. 3) A-F简要题解
contest链接:https://codeforces.com/contest/1283 A. Minutes Before the New Year 题意:给一个当前时间,输出离第二天差多少分钟 ...
- Codeforces Round #611 (Div. 3)
原题面:https://codeforces.com/contest/1283 A.Minutes Before the New Year 题目大意:给定时间,问距离零点零分还有多久? 分析:注意一下 ...
- Codeforces Round #611 (Div. 3) E
Oh, New Year. The time to gather all your friends and reflect on the heartwarming events of the past ...
- Codeforces Round #611 (Div. 3) C
There are nn friends who want to give gifts for the New Year to each other. Each friend should give ...
- Codeforces Round #611 (Div. 3) D
There are nn Christmas trees on an infinite number line. The ii -th tree grows at the position xixi ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
随机推荐
- 关于Dev-C++的安装以及基本使用方法
我觉得Dev-C++是一款小巧方便的编译器,就给那些刚刚学习编程的同学讲一下这个软件的安装和基本的编译以及一些使用的技巧. (完全是傻瓜式的截图和教程,内容过于冗余,主要是考虑到这些新生没有接触过编程 ...
- FLV文件格式分析(附源码)
FLV文件主要由两部分组成:Header和Body. 1. Header header部分记录了flv的类型.版本等信息,是flv的开头,一般都差不多,占9bytes.具体格式如下: 文件类型 3 b ...
- Oracle中的数据迁移到Mysql数据库中的方式Navicat premium工具
1.安装 Navicat premium工具 2.破解 Navicat premium工具 3.连接需要相互迁移的两个库Mysql和Oracle(可以是远程的或者本机的数据库都是可以的) 4.连接上之 ...
- java中一个类中的 this. 是什么作用
2)this代表的是本类的实例对象,不是什么调用本类的方法的对象.当你用new创建一个对象的时候,对象就已经在内存了.(具体的你的血jvm和反射).构造方法只是为了给对象里的属性赋值.在类里任何地方出 ...
- 安全文件传输协议之SFTP的使用
一.SFTP概述 在前几篇文章,我们讲到了文件传输协议FTP(File Transfer Protocol),那也是使用比较广泛的文件服务器,但是我们需要知道,Linux系统并不自带FTP程序 如果要 ...
- 一些常用的js代码
跳转 window.location.href= 刷新 location.reload()
- 神经网络的基础-Graph,Session
张量:基于 Tensorflow 的 NN:用张量表示数据,用计算图搭建神经网络,用会话执行计算图,优化线上的权重(参数),得到模型. 张量:张量就是多维数组(列表),用“阶”表示张量的维度. 0 阶 ...
- KALI修改密码
许久不用的Kali,某天打开竟忘了密码! 网上的方法颇为简单,遂准备亲自试一下. #光标移动到第二行的“恢复模式”,按E进入[编辑模式] #进入编辑模式,鼠标是不可操作的,用方向键往下面翻 ...
- ftrace使用
前段时间遇到个问题,有个后继音频数据处理线程调度不及时导致音频输出延迟,音视频不同步. 因此从系统上入手,采用ftrace进行debug,来看有哪些线程会去抢占音频数据处理线程. ftrace 提供了 ...
- ORACLE_BASE、ORACLE_HOME有什么区别
ORACLE_BASE.ORACLE_HOME有什么区别 ORACLE_BASE下是admin和productORACLE_HOME下则是ORACLE的命令.连接库.安装助手.listener等等 ...