[Offer收割]编程练习赛97

时间:2022-11-11 12:07:05

链接

[https://hihocoder.com/contest/offers97/problems]

题意

题目1 : 放置矩形

时间限制:10000ms

单点时限:1000ms

内存限制:256MB

描述

小Hi计划在笛卡尔平面中依次放置N个2x1的矩形(矩形的长是2,宽是1,长宽分别与XY轴平行)。其中第i个矩形的左下角预计放置在坐标(Xi, Yi)的位置上。

如果放置某一个矩形时,发现会与之前放置的矩形相交(公共面积大于0),就放弃放置当前矩形,继续尝试下一个矩形。

给定N个矩形的放置顺序,请你帮小Hi计算他一共能放下多少个矩形?

输入

第一行包含一个整数N。

以下N行包含N对整数Xi, Yi。

1 <= N <= 100000

0 <= Xi, Yi <= 1000000

输出

一个整数代表答案

样例输入

3

0 0

1 0

2 0

样例输出

2

分析

就是关键怎么判断我们当前放置的是否和已经放的有重叠

想一下重叠的情况是什么样的?

由于灭有相同的x,y,重叠的情况就是你那个第一条线放在已经放的中间线或者你中间线放置在已经放的第一条线

用一个set维护每一行的状况,后面新来就判断是否重叠即可,看代码吧

代码

#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,ans;
set<int>st[N];
int main() {
//freopen("in.txt","r",stdin);
scanf("%d",&n);
for(int i=1,x,y; i<=n; i++) {
scanf("%d%d",&x,&y);
if(st[y].find(x)==st[y].end()&&st[y].find(x+1)==st[y].end()){
st[y].insert(x);
st[y].insert(x+1);
ans++;
}
}
printf("%d\n",ans);
}

题目2 : 两条直线

时间限制:10000ms

单点时限:1000ms

内存限制:256MB

描述

平面上N个点,(X1, Y1), (X2, Y2) ... (XN, YN),已知这N个点都在两条直线y = a1x + b1和y = a2x + b2上(a1 > a2),并且每条直线上至少有10个点。

请你找出这两条直线,即计算出a1, b1和a2, b2。

输入

第一行包含一个整数N。

以下N行每行包含两个实数Xi和Yi。

20 <= N <= 100

-1000000 <= Xi, Yi <= 1000000

输出

输出一行,依次是a1, b1, a2, b2, 保留1位小数。

样例输入

20

2.800 23.480

2.100 5.920

4.900 35.240

9.900 63.240

0.800 12.280

6.400 43.640

6.600 44.760

3.400 7.480

7.600 50.360

3.000 24.600

8.000 13.000

4.300 8.560

3.600 27.960

5.500 38.600

8.900 14.080

0.400 3.880

1.800 5.560

4.200 8.440

4.000 8.200

5.400 9.880

样例输出

5.6 7.8 1.2 3.4

分析

这题就卡你精度问题了

你怎么判断出这两条线呢?

因为最多只有100暴力枚举出第一条

第二条就把不是第一条线上的点暴力枚举就行

然后要求输出的k1>k2就比较一下吧

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
double k1,b1,k2,b2,k3,b3;
double x[110],y[110];
bool vis[110];
int n;
void firstline(){
for(int i=1;i<n-1;i++)
for(int j=i+1;j<n;j++)
{
k1=(y[j]-y[i])/(x[j]-x[i]),b1=y[j]-k1*x[j];
for(int r=j+1;r<=n;r++)
{
k2=(y[r]-y[j])/(x[r]-x[j]),b2=y[r]-k2*x[r];
if(k1==k2&&b1==b2) return;
}
}
}
void secondline(){
for(int i=1;i<n-1;i++){
if(vis[i]) continue;
for(int j=i+1;j<n;j++)
{
if(vis[j]) continue;
k2=(y[j]-y[i])/(x[j]-x[i]),b2=y[j]-k2*x[j];
for(int r=j+1;r<=n;r++)
{
if(vis[r]) continue;
k3=(y[r]-y[j])/(x[r]-x[j]),b3=y[r]-k3*x[r];
if(k3==k2&&b3==b2) return;
}
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
//freopen("in.txt","r",stdin);
while(cin>>n){
for(int i=1;i<=n;i++)
cin>>x[i]>>y[i];
memset(vis,0,sizeof(vis));
firstline();
for(int i=1;i<=n;i++)
if(abs(y[i]-k1*x[i]-b1)<1e-9) vis[i]=1;
secondline();
if(k1<k2) swap(k1,k2),swap(b1,b2);
printf("%.1f %.1f %.1f %.1f\n",k1,b1,k2,b2);
}
return 0;
}

题目3 : 有向图可达节点

时间限制:50000ms

单点时限:5000ms

内存限制:256MB

描述

给定一个包含N个节点和M条边的有向图,其中节点的编号是1~N。请你对所有节点计算,从该节点总共可以到达多少个节点?(包含该节点本身)

输入

第一行包含两个整数N和M。

以下M行每行包含两个整数u和v,代表一条从u到v的有向边。

1 <= N <= 10000 0 <= M <= 20000 1 <= u, v <= N

输出

输出N行,每行一个整数。其中第i行代表从i号节点出发可以到达多少节点。

样例输入

4 4

1 2

2 3

1 3

3 4

样例输出

4

3

2

1

分析

就暴力dfs吧,没什么了。时间放宽了5s,要是1s还得优化。我还没写出优化的

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
vector<int> ve[100010];
bool vis[10010];
int dfs(int s){
int ans=0;
for(int i=0;i<ve[s].size();i++)
if(!vis[ve[s][i]])
{
vis[ve[s][i]]=1;
ans+=dfs(ve[s][i]);
}
return ans+1;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
//freopen("in.txt","r",stdin);
int n,m;
cin>>n>>m;
int x,y;
for(int i=1;i<=m;i++){
cin>>x>>y;
ve[x].push_back(y);
}
for(int i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
vis[i]=1;
cout<<dfs(i)<<endl;
}
return 0;
}

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

  1. hihocoder &lbrack;Offer收割&rsqb;编程练习赛4

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

  2. hihocoder &lbrack;Offer收割&rsqb;编程练习赛61

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

  3. &lbrack;Offer收割&rsqb;编程练习赛46

    [Offer收割]编程练习赛46赛后题解 A.AEIOU 分析

  4. ACM学习历程—Hihocoder &lbrack;Offer收割&rsqb;编程练习赛1

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

  5. HihoCoder1670 &colon; 比赛日程安排&lpar;&lbrack;Offer收割&rsqb;编程练习赛41&rpar;&lpar;模拟&rpar;

    描述 H国编程联赛中有N只队伍,编号1~N. 他们计划在2018年一共进行M场一(队)对一(队)的比赛. 为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天.也就是如 ...

  6. &lbrack;Offer收割&rsqb;编程练习赛48

    题目1 : 折线中点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定平面上N个点P1, P2, ... PN,将他们按顺序连起来,形成一条折线. 请你求出这条折线的 ...

  7. &lbrack;Offer收割&rsqb;编程练习赛3 - 题目3 &colon; 智力竞赛

    智力竞赛 Problem's Link ---------------------------------------------------------------------------- Mea ...

  8. &lbrack;Offer收割&rsqb;编程练习赛5-1 小Ho的防护盾

    #1357 : 小Ho的防护盾 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho的虚拟城市正在遭受小Hi的攻击,小Hi用来攻击小Ho城市的武器是一艘歼星舰,这艘歼星 ...

  9. hiho &num;1272 买零食 &lbrack;Offer收割&rsqb;编程练习赛2

    #1272 : 买零食 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食.然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰 ...

随机推荐

  1. 关于一道PHP面试题的解法

    参照一个int型数组,如int[] a1=new int[]{10,9,10,20,15,3,9,8,7,1,1},编写一个方法,要求输出不重复,且降序的拼接字符串(连接字符用逗号),如上数组,输出的 ...

  2. 001&lowbar;从原理上搞定编码-- Base64编码

    开发者对 Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了.实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该.大概介绍一下Base64的相关内容,花几分钟时 ...

  3. java应用死循环排查方法或查找程序消耗资源的线程方法(面试)

    今天遇到一个面试,怎么在一堆线程中查找一个死循环? 如果遇到线上应用cpu飙升,并出现OutOfMemery怎么办? 首先线上应用的jvm配置要养成良好的习惯,增加一下配置则可以在jvm发生 oom的 ...

  4. sql server trace 和 Profiler

    MS SQL Server Profiler概述:       MS SQL Server Profiler是SQL Trace的GUI接口,提供对SQL Server Database Engine ...

  5. linux 时钟源初步分析linux kernel 时钟框架详细介绍

    初步概念: 看datasheet的关于时钟与定时器的部分, FCLK供给cpu, HCLK供给AHB总线设备(存储器控制器,中断控制器.LCD控制器.DMA.USB主机控制器等), PCLK供给APB ...

  6. BZOJ 3514 (动态树)

    这两天终于基本理解了Link-Cut Tree这种神一般的东西.然后就来做这道题了. 原题是CodeChef上的.CodeChef上没有强制在线,且时限更宽松,所以似乎用莫队一样的算法把询问分组就能水 ...

  7. IE兼容性bug汇总

    1.IE6的双边距BUG. 发生条件:如果有元素是浮动元素,则该元素与它的父元素(一般是一个容器)直接相接触(中间不能隔着其他元素)的左或右的边距就会产生双倍边距,也意味着相邻的兄弟元素不可能会产生双 ...

  8. dedecms 封面模板和列表模板有什么不同

    封面模板,相当于你一个大栏目的封面.举例:你有一个栏目叫做"建站"而下面有很多子栏目,例如代码教程.模板下载.seo经验等,那么封面就相当于这个大栏目的首页,然后您可以在这个页面展 ...

  9. Memcached学习笔记 — 第四部分&colon;Memcached Java 客户端-gwhalin&lpar;1&rpar;-介绍及使用

     介绍 Memcached java client是官方推荐的最早的memcached java客户端.最新版本:java_memcached-release_2.6.1. 官方下载地址:http ...

  10. hdu2121 最小树形图的虚根

    /* 最小树形图的第二题,终于有了一些理解 具体看注释 */ /* 无定根的最小树形图 建立虚root 每次只找最短的那条入边 最小树形图理解: 第一步:寻找最短弧集E:扫一遍所有的边,找到每个点权值 ...