首页 > 其他分享 >ABC292解题报告

ABC292解题报告

时间:2023-03-04 23:23:06浏览次数:64  
标签:ld le 报告 int sqrt ++ 解题 used ABC292

比赛传送门

E. Transitivity

题意:有一张有向图,你需要在其中添加若干条边,满足对于任意 \(a\to b, b\to c\),都有 \(a\to c\)。求最少的添加边数。\(n,m\le 2000\)。

首先可以转化为最少的总边数,再减去原有的 \(m\) 条边。容易发现新图中存在 \(a\to b\),当且仅当原图中 \(a\) 能到达 \(b\)。所以问题转化为对每个点求它能到达的点数,\(O(nm)\) 即可。(应该没人像我一样傻地写了个 tarjan+bitset 吧)

By SSRS

#include <bits/stdc++.h>
using namespace std;
int main(){
  int N, M;
  cin >> N >> M;
  vector<vector<int>> E(N);
  for (int i = 0; i < M; i++){
    int u, v;
    cin >> u >> v;
    u--;
    v--;
    E[u].push_back(v);
  }
  int cnt = 0;
  for (int i = 0; i < N; i++){
    vector<bool> used(N, false);
    used[i] = true;
    queue<int> Q;
    Q.push(i);
    while (!Q.empty()){
      int v = Q.front();
      Q.pop();
      for (int w : E[v]){
        if (!used[w]){
          used[w] = true;
          Q.push(w);
        }
      }
    }
    for (int j = 0; j < N; j++){
      if (j != i && used[j]){
        cnt++;
      }
    }
  }
  cout << cnt - M << endl;
}

F. Regular Triangle Inside a Rectangle

题意:一个 \(a\times b\) 的矩形里放正三角形,求最大边长。\(1\le a,b\le 1000\),精度误差 \(10^{-9}\)。

首先钦定 \(a\ge b\)(否则交换)。

做法一

直接想感觉会有很多分类讨论,所以可以考虑二分答案。

对于一个边长 \(x\),如果高超过 \(b\)(即 \(\frac{\sqrt{3}}{2}x>b\))则显然不可行,如果 \(x\le b\),则显然可行。否则,一定可以将其一个顶点放到一个角上,另一个顶点放到长边上,最后一个顶点悬空。如下图:

image

于是可以通过勾股定理求出 \(y\),将 \(x\) 边旋转 \(60^\circ\),看是否超出矩形即可。

By cxm1024

#include <bits/stdc++.h>
using namespace std;
#define ld long double
const ld eps = 1e-12, sq3 = sqrt((ld)3);
int a, b;
bool check(ld x) {
	if (sq3 * x / 2 > b) return 0;
	if (x <= b) return 1;
	ld y = sqrt(x * x - b * b);
	return sq3 * b / 2 + y / 2 <= a;
}
signed main() {
	scanf("%d%d", &a, &b);
	if (a < b) swap(a, b);
	ld l = 0, r = 2000;
	while (l + eps <= r) {
		ld mid = (l + r) / 2;
		if (check(mid)) l = mid;
		else r = mid;
	}
	printf("%.11Lf\n", (l + r) / 2);
	return 0;
}

做法二

上面的做法显然比较麻烦,其实可以不二分答案而很快地求解。

首先容易发现,如果长边过长,超过了短边的 \(\frac{2}{\sqrt{3}}\) 倍,则显然正着放最优,答案为短边的 \(\frac{2}{\sqrt{3}}\)。

否则,参考上面二分答案的过程可以发现,答案的 \(x\) 一定是被长限制住了才不能增长,如下图:

image

此时便可以直接解出 \(x\)。

By SSRS

(注:这份代码里钦定 \(a\le b\))

#include <bits/stdc++.h>
using namespace std;
int main(){
  cout << fixed << setprecision(20);
  int A, B;
  cin >> A >> B;
  if (A > B){
    swap(A, B);
  }
  if (B > A * 2 / sqrt(3)){
    cout << A * 2 / sqrt(3) << endl;
  } else {
    cout << hypot(B, A * 2 - B * sqrt(3)) << endl;
  }
}

标签:ld,le,报告,int,sqrt,++,解题,used,ABC292
From: https://www.cnblogs.com/cxm1024/p/17179471.html

相关文章

  • 今日报告-13
    今日打卡所花时间(包括上课):5h代码量(行):300发表博客:4篇(不包括本篇)了解到的知识点:继续Android学习,进一步每日打卡app,完成了每日打卡APP的注册,登录,打卡功能,正在研究Alarm......
  • MySQL服务无法启动,服务没有报告任何错误
    在cmd终端中启动MySQL服务时出现MySQL服务无法启动,服务没有报告任何错误这样的问题 出现这样的问题原因可能是,在第一次初始化安装mysql时,自己创建的有一个my.ini文件。......
  • 财务数据基于截止日期和公告日期取报告期的区别
    概念财政年度:公司运行的财政年,可以和日历年不一样。比如BABA.N的财政年是日历上年4月1日~日历本年3月31日,即虽然日历上本年才到3月31日,但本年财政上已经结束了。年节日:财......
  • RK3568核心板以太网大数据测试报告-万象奥科
    1.测试对象HD-RK3568-IOT底板基于HD-RK3568-CORE工业级核心板设计(双网口、双CAN、5路串口),接口丰富,适用于工业现场应用需求,亦方便用户评估核心板及CPU的性能。适用于工......
  • 今日报告-11
    今日打卡所花时间(包括上课):5h代码量(行):300发表博客:3篇(不包括本篇)了解到的知识点:今天重心重回Android学习,今天初步开始写了每日打卡app,同时学习和巩固了许多相关知识,......
  • 今日报告
    总结--连接数据库的工具人的一天代码时间(包括上课):14h代码量(行):40行(蚌埠住了家人们......)博客数量(篇):2篇了解到的相关知识点:1、上一篇Python中提到的相关内容2、Android......
  • 今日报告
    //增packagecom.test.dao;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.SQLException;importcom.test.jdbc.DBConnection;im......
  • 移动app安全测试工具好物分享,移动app安全测试报告费用标准
    移动互联网时代,我们的生活和工作深受移动app的影响。随着移动app的广泛应用,安全问题成为人们最关注的话题之一。移动app安全除了和软件开发密不可分之外,软件测试的作用......
  • 实验报告
    一.实验目的解析SSM框架?2.SpringBoot框架功能特性?3.SpringBoot工作生命周期?4.SSM框架和SpringBoot框架的对比?5.Maven框架的jar管理方式? 二.......
  • allure报告简单生成
    安装allure,配置环境变量importosimportpytestimportrequests#验证码登录classTestLogin:deftest_login(self):#登录的地址url="http://192.......