第一次做这种比赛,被自己坑的好惨。。。

A.这道题的关键其实是如果有k和n满足kD+F>nL>kD则不能走无限远,分支看似难整理,其实比较简单,F>L根本就不用算了,明摆着就是Bsi强迫症的

L和D有倍数约数关系的也比较简单

剩下的就可以规约为kD%L>L-F,如果有k能让此式成立,那强迫症就被Bsi。

注意到kD%L的排布有倍数规律,一定是gcd(D,L-D)的倍数

然后求模数是否能到达L-F就是了

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
int t,f,l,d;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&l,&f,&d);
if(l%d==)puts(f<=d?"YES":"NO");
else if(d%l==)puts(f<=l?"YES":"NO");
else if(f>l)puts("NO");
else
{
d=d%l;
int a=l-f;
int my=l-d;
ll ku=__gcd(d,my);
ll ti=(a+)/ku+((a+)%ku!=);
puts(ti*ku>=(ll)l?"YES":"NO");
}
}
return ;
}

B.被自己的愚蠢坑死了

用gets()得到的01字符串最后是'\0'不是'0',判定是否可达这么写:=='0'就不进去,结果答案多了一条最右边的。。。

联通分量最大可达500*500/2,但是储存序号用的char,导致程序遍历了不该遍历的,因为用的pair<>,出错信息难定位,换做struct pair才发现

还有最后要先列后行循环,我却像往常一样先行后列循环,结果顺序错误

其实本题没有什么太多的坑点,只是联通分量加01矩阵,输出联通分量时不要输出此时间戳以外的分量就是了

///O(n)做法
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
typedef long long ll;
const int N=;
char mar[N][N];
int vis[N][N];
int h,w;
typedef struct mypair
{
int first,second;
mypair(int a,int b){first=a,second=b;}
mypair(){}
mypair(mypair& a){first=a.first;second=a.second;}
}mypair;
mypair queue[N*N*];
int up1[N*N],down1[N*N],left1[N*N],right1[N*N];
const int dire[][]={{,-},{,},{,},{-,},{,}};
int max(int a,int b){return a>b?a:b;}
int min(int a,int b){return a<b?a:b;}
void bfs(int g,int row,int col)
{
int rear=,fron=;
queue[rear++]=mypair(row,col);
up1[g]=down1[g]=row;
left1[g]=right1[g]=col;
vis[row][col]=g;
while(fron<rear)
{
mypair now=queue[fron++];
for(int i=;i<;i++)
{
int nrow=now.first+dire[i][],ncol=now.second+dire[i][];
if(nrow<= || nrow>h || ncol<= && ncol>w)continue;
if(vis[nrow][ncol]==g)continue;
if(mar[nrow][ncol]!='')continue;
queue[rear++]=mypair(nrow,ncol);
up1[g]=min(up1[g],nrow);
down1[g]=max(down1[g],nrow);
left1[g]=min(left1[g],ncol);
right1[g]=max(right1[g],ncol);
vis[nrow][ncol]=g;
}
}
}
int main()
{
int te,i,j;
memset(mar,'',sizeof(mar));
memset(vis,,sizeof(vis));
scanf("%d%d",&h,&w);getchar();
int cnt=;
for(i=;i<=h;i++)
{
gets(mar[i]+);
}
for(j=;j<=w;j++)
{
for(i=;i<=h;i++)
{
if(vis[i][j]== && mar[i][j]=='')
{
bfs(++cnt,i,j);
printf("%d %d\n",down1[cnt]-up1[cnt]+,right1[cnt]-left1[cnt]+);
for(int ai=up1[cnt];ai<=down1[cnt];ai++)
{
for(int aj=left1[cnt];aj<=right1[cnt];aj++)
{
printf("%d",vis[ai][aj]==cnt);
}
puts("");
}
}
}
}
return ;
}

C.D.?场上没做,之后研究之后出题解吧

hihocoder [Offer收割]编程练习赛8的更多相关文章

  1. hihocoder [Offer收割]编程练习赛4

    描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...

  2. hihocoder [Offer收割]编程练习赛61

    [Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...

  3. ACM学习历程—Hihocoder [Offer收割]编程练习赛1

    比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...

  4. hihocoder offer收割编程练习赛8 C 数组分拆

    思路:(引自bfsoyc的回答:http://hihocoder.com/discuss/question/4160) 动态规划.状态dp[i]表示 前i个数的合法的方案数,转移是 dp[i] = s ...

  5. hihocoder [Offer收割]编程练习赛18 C 最美和弦(dp)

    题目链接:http://hihocoder.com/problemset/problem/1532 题解:一道基础的dp,设dp[i][j][k][l]表示处理到第几个数,当前是哪个和弦错了几次初始x ...

  6. hihoCoder [Offer收割]编程练习赛3 D子矩阵求和

    子矩阵求和 http://hihocoder.com/discuss/question/3005 声明一下: n是和x一起的,m是和y一起的 x是横着的,y是纵着的,x往右为正,y往下为正 (非常反常 ...

  7. hihocoder [Offer收割]编程练习赛52 D 部门聚会

    看了题目的讨论才会做的 首先一点,算每条边(u, v)对于n*(n+1)/2种[l, r]组合的贡献 正着算不如反着算 哪些[l, r]的组合没有包含这条边(u, v)呢 这个很好算 只需要统计u这半 ...

  8. hihocoder [Offer收割]编程练习赛14

    A.小Hi和小Ho的礼物 谜之第1题,明明是第1题AC率比C还要低.题目是求在n个不同重量袋子选4袋,2袋给A,2袋给B,使2人获得重量相同,求问方案数. 我也是一脸懵b...o(n2)暴力枚举发现把 ...

  9. hihocoder [Offer收割]编程练习赛12 [1495] ---- 矩形分割

    原题链接 矩形分割 算法分析: 解决该题要用到"并查集"的思想. 这里有一篇不错的博客介绍并查集: 并查集(Union-Find)算法介绍 记 int total=N*M,这里会有 ...

随机推荐

  1. 【Python】-NO.96.Note.2.Python -【Python 基础】

    1.0.0 Summary Tittle:[Python]-NO.95.Note.1.Python -[Python 老男孩 基础]- Style:Python Series:Python Since ...

  2. 8款不错的 CI/CD工具

    Jenkins Jenkins是CI市场中最知名且最常见的名号之一.其最初是由Sun公司的一位工程师打造的一个辅助项目,并迅速扩展为最大的开源CI工具之一,可帮助工程团队实现自动化部署.顺带一提:我们 ...

  3. CentOS6.5 安装Spark集群

    一.安装依赖软件Scala(所有节点) 1.下载Scala:http://www.scala-lang.org/files/archive/scala-2.10.4.tgz 2.解压: [root@H ...

  4. case insensitive in php

    date: 2017-07-27 PHP的命名空间是否区分大小写? 结论:不区分大小写,与类名一样(不区分大小写). 不区分大小写的包括 函数名 方法名 类名 控制语句(if, else, for, ...

  5. LINQ以及LINQ to Object 和LINQ to Entities

    LINQ的全称是Language Integrated Query,中文译成“语言集成查询”,是一种查询技术. LINQ查询通过提供一种跨各种数据源和数据格式使用数据的一致模型,简化了查询过程.LIN ...

  6. js跨域需要token。

    将rems从tms中独立出来以后,每次都需要先打开tms,再打开rems,如果我足够聪明,那么很容易可以分析得到原因. 第一,会导致跨域出现问题的易错点就那么几个,是否加上“Access-Contro ...

  7. CSU 1817 Bones’s Battery Submit(二分+Floyd)

    Bones's Battery Submit [题目链接]Bones's Battery Submit [题目类型]二分+Floyd &题意: 有n个点,m条边,从点ui到点vi的费电量是di ...

  8. JavaScript 深入了解对象中的属性

    本篇主要介绍JS中对象的属性,包括:属性的分类.访问方式.检测属性.遍历属性以及属性特性等内容. 目录 1. 介绍:描述属性的命名方式.查找路径以及分类 2. 属性的访问方式:介绍'.'访问方式.'[ ...

  9. 详解Linux下iptables中的DNAT与SNAT设置(转)

    详解Linux下iptables中的DNAT与SNAT设置 这篇文章主要介绍了Linux下iptables中的DNAT与SNAT设置,是Linux网络配置中的基础知识,需要的朋友可以参考下   原文连 ...

  10. html5-颜色的表示

    div{width: 100%;height: 100px;}body{background: url(../pic/2.png);}/*#div1{background: #ff0000;}#div ...