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的整数倍的点上分布着灯笼,而在 ...
随机推荐
- cmd运行sql server安装
cmd运行sql server安装 SQL2012非群集安装_更新到最新版本.bat setup.exe /UpdateSource=.\hotfix\Latest /ACTION="Ins ...
- html5,表单与label标签的用法2
<form action="" autocomplete="on"> <input type="submit" va ...
- Head中的标签
Head中的其它一些用法 1.scheme (方案) 说明:scheme can be used when name is used to specify how the value of conte ...
- ECStore在Win环境下如何运行CMD命令
大多数程序员使用windows开发环境来做ECStore二次开发,经常需要使用 ECStore自带的cmd命令进行一些系统操作,如清除缓存(cacheclean),升级程序(update),创建新的a ...
- CSS3:transform translate transition 这些都是什么?
transform:一个属性名称,即CSS3 2D转换 属性. translate:一个属性函数,用法是translate(dx,dy) div { transform: translate(50px ...
- 构建高性能的ASP.NET应用程序
看见大标题的时候,也许各位看官会自然而然的联想到如何在设计阶段考虑系统性能问题,如何编写高性能的程序代码.关于这一点,大家可以在MSDN和相关网站上找到非常多的介绍,不过大多是防患于未难,提供的是在设 ...
- :only-child
如果某个元素是父元素中唯一的子元素,那将会被匹配 如果父元素中含有其他元素,那将不会被匹配.(注:这里的其他元素并不包含文本节点,如:<p><img/>图片</p> ...
- Linux之 sort,uniq,cut,wc命令详解
sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...
- [课程设计]Scrum 1.7 多鱼点餐系统开发进度(点餐菜式内容添加及美化)
[课程设计]Scrum 1.7 多鱼点餐系统开发进度(点餐菜式内容添加及美化) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题 ...
- IIS 7 应用程序池自动回收关闭的解决方案
如果你正在做ASP.NET,那肯定会用到IIS 如果你想在ASP.NET Application中加入某个定时任务,那想必一定是用一个线程在不停地做定时计算 那假设我们在自己的ASP.NET应用程序中 ...