第一次全程参加的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) 解题报告的更多相关文章

  1. Codeforces Round #324 (Div. 2)解题报告

    ---恢复内容开始--- Codeforces Round #324 (Div. 2) Problem A 题目大意:给二个数n.t,求一个n位数能够被t整除,存在多组解时输出任意一组,不存在时输出“ ...

  2. Codeforces Round #382 (Div. 2) 解题报告

    CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...

  3. Codeforces Round #216 (Div. 2)解题报告

    又范低级错误! 只做了两题!一道还被HACK了,囧! A:看了很久!应该是到语文题: 代码:#include<iostream> #include<];    ,m2=;    ;i ...

  4. Codeforces Round #281 (Div. 2) 解题报告

    题目地址:http://codeforces.com/contest/493 A题 写完后就交了,然后WA了,又读了一遍题,没找出错误后就开始搞B题了,后来回头重做的时候才发现,球员被红牌罚下场后还可 ...

  5. Codeforces Round #277 (Div. 2) 解题报告

    题目地址:http://codeforces.com/contest/486 A题.Calculating Function 奇偶性判断,简单推导公式. #include<cstdio> ...

  6. Codeforces Round #276 (Div. 2) 解题报告

    题目地址:http://codeforces.com/contest/485 A题.Factory 模拟.判断是否出现循环,如果出现,肯定不可能. 代码: #include<cstdio> ...

  7. Codeforces Round #350 (Div. 2)解题报告

    codeforces 670A. Holidays 题目链接: http://codeforces.com/contest/670/problem/A 题意: A. Holidays On the p ...

  8. Codeforces Round #479 (Div. 3)解题报告

    题目链接: http://codeforces.com/contest/977 A. Wrong Subtraction 题意 给定一个数x,求n次操作输出.操作规则:10的倍数则除10,否则减1 直 ...

  9. Codeforces Round #515 (Div. 3) 解题报告(A~E)

    题目链接:http://codeforces.com/contest/1066 1066 A. Vova and Train 题意:Vova想坐火车从1点到L点,在路上v的整数倍的点上分布着灯笼,而在 ...

随机推荐

  1. centos 更新python

    1.CentOS安装Python的依赖包 yum groupinstall "Development tools"yum install zlib-devel bzip2-deve ...

  2. Python基础第三篇

    一.collections系列 Counter是对字典类型的补充,用于追踪值的出现次数,具备字典的所有功能 + 自己的功能 1.计数器Counter import collections a='aba ...

  3. 如何清理photoshop cs6 被升级的烦人的adobe creative cloud组件

    安装photoshop cs6(虽然目前已经退出到cc 2015,不过因激活成熟度等,我还是偏向于使用cs6,够用!),默认安装adobe application manager. 不过如果不小心单独 ...

  4. Thinkphp单字母快捷键

    在ThinkPHP中有许多使用简便的单字母函数(即快捷方法),可以很方便开发者快速的调用,但是字母函数却不方便记忆,本文将所有的字母函数总结一下,以方便以后查找. 1.U() URL组装 支持不同UR ...

  5. Network-POJ3694并查集+LCA

    Network Time Limit: 5000MS   Memory Limit: 65536K       Description A network administrator manages ...

  6. Android中SQLite应用详解

    上次我向大家介绍了SQLite的基本信息和使用过程,相信朋友们对SQLite已经有所了解了,那今天呢,我就和大家分享一下在Android中如何使用SQLite. 现在的主流移动设备像Android.i ...

  7. [问题2014A09] 复旦高等代数 I(14级)每周一题(第十一教学周)

    [问题2014A09]  设 \(A,B\) 分别是 \(3\times 2\), \(2\times 3\) 矩阵且满足\[AB=\begin{bmatrix} 8 & 2 & -2 ...

  8. Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’解决方法 + Linux启动/停止/重启Mysql数据库的方法

    启动mysql 报错: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/m ...

  9. 【CSU1812】三角形和矩形 【半平面交】

    检验半平面交的板子. #include <stdio.h> #include <bits/stdc++.h> using namespace std; #define gg p ...

  10. contiki-main.c 文件的进程分析

    基本进程的创建实例: 共三部分:创建进程.进程自启动和进程的主体部分 /* 声明一个名为hello_world_process和led_process进程 PROCESS 宏实际上声明一个函数并定义一 ...