Codeforces Round #380 (Div. 2) 解题报告
第一次全程参加的CF比赛(虽然过了D题之后就开始干别的去了),人生第一次codeforces上分……(或许之前的比赛如果都参加全程也不会那么惨吧),终于回到了specialist的行列,感动~。虽然最后也只过了A、B、D3题,但能上分还是非常的激动不已呀。
先发出来A、B、D的参考解法,C比赛时读了题感觉自己可以做出来,但时间只剩20分钟了,索性弃疗……。
11.23 补充上了C的参考代码
A题:
用一些str函数应该也可以做,但考虑到字符串长度只有不到100以及题目整体不是很复杂,不如直接求解。
从头开始扫描,寻找为“ogo”的子串(注意扫到倒数第三个数就结束),如果扫到了那么就输出”***“并继续看“go"能重复多少个,这个过程都只用while循环控制一下就可以了。最后再从最后的位置到n用for循环(如果此时已经到头了那么for循环也不会也不需要进行了)
#include<stdio.h>
#include<bits/stdc++.h>
#include <iostream>
using namespace std;
char a[];
int n,i=;
bool check()
{
if(a[i]=='o'&&a[i+]=='g'&&a[i+]=='o')
return true;
return false;
}
int main()
{ scanf("%d",&n);
scanf("%s",a);
while(i<=n-)
{
if(check())
{
i+=;
while(a[i]=='g'&&a[i+]=='o')
i+=;
printf("***");
}
else
{
printf("%c",a[i]);
i++;
}
}
for(int j=i;j<n;j++)
printf("%c",a[j]);
return ;
}
B题:
只需要看从每个1能没有阻挡的直走到多少个0,将这些加起来即为所求的答案。所以扫一遍整个图,从每个1出发,向四周走,遇到1或走到边界停下,不然个数就+1。
#include<stdio.h>
#include<bits/stdc++.h>
#include <iostream>
using namespace std;
int n,m,an,ii,jj;
int lo[][],dir[][]={{,},{,},{-,},{,-}};
int main()
{
int i,j,k;
scanf("%d%d",&n,&m);
an=;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
scanf("%d",&lo[i][j]);
}
for(i=;i<=n;i++)
{
for(j=;j<=m;j++)
{
if(lo[i][j]==)
{
for(k=;k<;k++)
{
ii=i;
jj=j;
while((ii>&&ii<=n&&jj>&&jj<=m&&lo[ii][jj]==)||(ii==i&&jj==j))
{
ii+=dir[k][];
jj+=dir[k][];
if(ii>&&ii<=n&&jj>&&jj<=m&&lo[ii][jj]==)
{an+=;
}
else break;
}
}
}
}
}
printf("%d\n",an);
return ;
}
C题
二分查找,先按汽车油箱容量递增排序,二分查找符合条件的油箱最小容量。再排序,找最低的价格。初始设定答案为一个很大的数,如果最后答案不变输出-1,不然输出新的最小价格。
#include<stdio.h>
#include<bits/stdc++.h>
#include <iostream>
using namespace std;
long long int k,n,x=,dis[];
long long int s,t,time1,an,l,r,mid;
bool cmp(long long x,long long y)
{
return x<y;
}
struct oh
{
long long cap,val;
}che[];
bool cmp2(oh x,oh y)
{
if(x.cap!=y.cap)
return x.cap<y.cap;
else
return x.val<y.val;
}
bool cmp3(oh x,oh y)
{
return x.val>y.val;
}
int main()
{
scanf("%I64d%I64d%I64d%I64d",&n,&k,&s,&t);
long long int i,j;
dis[]=;
an=;
for(i=;i<=n;i++)
{
scanf("%I64d%I64d",&che[i].val,&che[i].cap);
}
for(i=;i<=k;i++)
{
scanf("%I64d",&dis[i]);
}
sort(dis+,dis+k+,cmp);
sort(che+,che+n+,cmp2);
dis[k+]=s;
time1=;
l=;r=n;
while(l<=r)
{
mid=(l+r)/;
for(j=;j<=k+;j++)
{
if(dis[j]-dis[j-]>che[mid].cap)
break;
else
{
if(x<che[mid].cap-*(dis[j]-dis[j-]))
time1+=(dis[j]-dis[j-]-x);
else
time1+=(*(dis[j]-dis[j-])-che[mid].cap);
}
}
if(j==k+&&time1<=t)
{
r=mid-;
}
else
{
l=mid+;
}
time1=;
}
if(r<n)
{sort(che+r+,che+n+,cmp3);
printf("%I64d\n",che[n].val);}
else
printf("-1\n");
return ;
}
D题
我的做法貌似有点麻烦。对整个字符串现在前面加上1,末尾加上1,之后扫描一遍,对于连续的0长度小于船长的部分直接填上1。并用he代表余下为0的个数,最少的操作数即为通过最少的操作达到he<船长*船个数的状态。(注意到射击1个1右面数第”船长“个0如果没有打中船,那么从这个1到那个位置之间所有的都一定不会是船的一部分)这样之后从左往右扫,遇到a[i]=1,a[i+1]=0就意味着从第i个数开始一定有不小于船长个连续的0,这样对其操作一定不会产生”浪费“,一定会是最优的操作。如果是1而下个数不是0,那么就是碰上连续1的情况,i++即可,如果是0的话,he--,继续扫描,注意要用一个计数变量记录连续这样的0有多少个,如果达到船长就意味着有必要进行一次操作,以求达到最优的解法。
#include<stdio.h>
#include<bits/stdc++.h>
#include <iostream>
using namespace std;
char a[];
int n,ge,len,st,en,i,j,he=,k,cnt=,an[],s,geshu,chang;
int main()
{
scanf("%d%d%d%d",&n,&ge,&len,&k);
a[]='';
scanf("%s",a+);
a[n+]='';
st=;en=;
he=n-k;
for(i=;i<=n+;i++)
{
if(a[i]=='')
{
en=i;
if(en-st->&&en-st-<len)
{for(i=st+;i<en;i++)
a[i]='';
he-=(en-st-);
}
else
if((en-st-)%len!=)
{
for(j=en-;j>=en-(en-st-)%len;j--)
{a[j]='';
he--;
}
}
st=i;
}
}
chang=len*ge;
i=;
while(he>=chang)
{
if(a[i]==''&&a[i+]=='')
{
geshu=;
an[cnt]=i+len;
cnt++;
for(j=i+;j<=i+len;j++)
{
a[j]='';
}
he-=len;
i=i+len;
}
else{
if(a[i]=='')
{
geshu=;
while(a[i]!='')
i++;
i--;
}
else
{
if(geshu<len-)
{
a[i]='';
geshu++;
he--;
}
else
{
he--;
geshu=;
a[i]='';
an[cnt]=i;
cnt++;
}
}
}
}
printf("%d\n",cnt);
for(i=;i<cnt;i++)
printf("%d ",an[i]);
return ;
}
通过这次CF,发现或许自己没有自己之前想象的那么水,以后再参加比赛一定好好对待,全程参加,不再划水了。
Codeforces Round #380 (Div. 2) 解题报告的更多相关文章
- Codeforces Round #324 (Div. 2)解题报告
---恢复内容开始--- Codeforces Round #324 (Div. 2) Problem A 题目大意:给二个数n.t,求一个n位数能够被t整除,存在多组解时输出任意一组,不存在时输出“ ...
- Codeforces Round #382 (Div. 2) 解题报告
CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...
- Codeforces Round #216 (Div. 2)解题报告
又范低级错误! 只做了两题!一道还被HACK了,囧! A:看了很久!应该是到语文题: 代码:#include<iostream> #include<]; ,m2=; ;i ...
- Codeforces Round #281 (Div. 2) 解题报告
题目地址:http://codeforces.com/contest/493 A题 写完后就交了,然后WA了,又读了一遍题,没找出错误后就开始搞B题了,后来回头重做的时候才发现,球员被红牌罚下场后还可 ...
- Codeforces Round #277 (Div. 2) 解题报告
题目地址:http://codeforces.com/contest/486 A题.Calculating Function 奇偶性判断,简单推导公式. #include<cstdio> ...
- Codeforces Round #276 (Div. 2) 解题报告
题目地址:http://codeforces.com/contest/485 A题.Factory 模拟.判断是否出现循环,如果出现,肯定不可能. 代码: #include<cstdio> ...
- Codeforces Round #350 (Div. 2)解题报告
codeforces 670A. Holidays 题目链接: http://codeforces.com/contest/670/problem/A 题意: A. Holidays On the p ...
- Codeforces Round #479 (Div. 3)解题报告
题目链接: http://codeforces.com/contest/977 A. Wrong Subtraction 题意 给定一个数x,求n次操作输出.操作规则:10的倍数则除10,否则减1 直 ...
- Codeforces Round #515 (Div. 3) 解题报告(A~E)
题目链接:http://codeforces.com/contest/1066 1066 A. Vova and Train 题意:Vova想坐火车从1点到L点,在路上v的整数倍的点上分布着灯笼,而在 ...
随机推荐
- [技术分享] .NET下 , 上传图片的处理方式 , 贴上代码 .
如题 , 直接上单代码 , AC代码 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" ...
- VS2013 密钥
MXS&Vincene ─╄OvЁ &0000017─╄OvЁ MXS&Vincene MXS&Vincene ─╄OvЁ:今天很残酷,明天更残酷,后天很美好, ...
- 马哥教育视频笔记:01(Linux常用命令)
1.查看缓存中使用的命令和命令路径 [wskwskwsk@localhost /]$ hash 命中 命令 /usr/bin/printenv /usr/bin/ls /usr/bin/clear 2 ...
- java—数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = input数组中,除了input[i] 之外的所有数的乘积,不用考虑溢出例如 input {2, 3, 4, 5} output: {60, 40, 30, 24}
/** * 小米关于小米笔试题 数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = * input数组中,除了input[i] 之外的 ...
- Ubuntu16.04搭建LAMP架构服务器
安装Apache: weirubo@weirubo-VirtualBox:~$ sudo apt-get install apache2 查看Apache版本: weirubo@weirubo-Vi ...
- java中如何获取昨天的当前日期
在java里,获取昨天的当前日期,可以采用calendar来做,也可以采用date来做:如下: 1.采用calendar来做: Calendar cal=Calendar.getInstance(); ...
- _vimrc默认配置
"不使用兼容vi的模式set nocompatible source $VIMRUNTIME/vimrc_example.vimsource $VIMRUNTIME/mswin.vimbeh ...
- [课程设计]Scrum 2.1 多鱼点餐系统开发进度(下单列表布局)
[课程设计]Scrum 2.1 多鱼点餐系统开发进度(下单列表布局) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店 ...
- 调用discuz编辑器再也不是问题了
前面讲了如何开发一个discuz的特殊主题插件,详情可在此查看discuz特殊主题插件开发步骤和犯的愚蠢错误.上一篇文章讲解的是一些简单的开发步骤,不涉及到具体的编码.网页编辑器之类的都是系统默认带过 ...
- iptables交互配置shell脚本
#!/bin/bash while true do clear echo "———————-menu————————" echo -e "\033[49;32;1m(1) ...