10.19 qbxt国庆day3

最近的题都莫名简单

经常AK

炼金术

【问题描述】

即使是最伟大的ACM选手也是需要足够的金钱来把妹的的。于是ZYB发明了一台炼金机器.
这台机器一共有三个功能:

1.能把a位沙子变成b位石油.

2.能把c位石油变成d位金子.

3.能把e位金子变成f位沙子.

值得注意的是你并不需要用整单位的物品进行兑换,例如你可以利用0.1 沙子来兑换0.1 石油。

然而现在ZYB里手只有10^100的沙子,他想考考你,他能否得到无穷多的金子?

【输入格式】

从文件 a.in 中读入数据。

第一行一个正整数T,表示数据组数.

接下来T行,每行6个整数a_i,b_i,c_i,d_i,e_i,f_i.

【输出格式】

输出到文件 a.out 中。

对于每组数据,如果ZYB能产生无穷多的金子就输出YES,否则输出NO.

【样例输入】

(本题样例输入输出有10万组,这里取前6组作为展示)

6
198 226 169 343 676 825
0 74 904 423 852 249
250 613 912 549 515 76
20 783 0 670 874 494
382 908 220 930 343 51
226 608 97 969 740 630

【样例输出】

YES
YES
NO
YES
YES
YES

【数据规模】

对于50%的数据,所有数都不为0.

对于50%的数据,没有任何限制。

以上的数据档互不相交.

对于所有的数据,满足\(1\le T\le100000, 0\le a,b,c,d,e,f\le1000\).

【题解】

如果我们有1的沙子,可以变成\(\displaystyle\frac b a\)的石油,进而可以变成\(\displaystyle\frac{bd}{ac}\)的金子,进而可以变成\(\displaystyle\frac{bdf}{ace}\)的沙子。如果\(bdf>ace\)那么就可以进入高产循环,进而能产生无限金子。

但是当他们中有0呢?我们从根源来考虑问题:

  • 如果d=0,因为你没有金子,而且你无法产生金子,所以你无法得到金子。
  • d不等于0:
    • 如果c=0,那么你可以从没有石油无中生有出金子,所以能产生无限金子喽。
    • 如果c不等于0,那么石油可以转化为金子,你有了无限石油就有了无限金子。
      • 我们再分析石油,如果b=0,那么你不能产生石油,所以你无法得到金子。
      • 如果b不等于0:那么就能产生石油了。
        • 如果a=0,那么你可以产生无限石油,进而产生无限金子。
        • 如果a不等于0:继续分析,那么您就能从沙子转化为金子
          • 我们继续分析沙子,如果f=0,那么如果你想要产生无限金子,你是需要把沙子再转化成沙子的,显然现在不可以,所以就不能
          • 如果f不等于0:你就能转化出沙子
            • 如果e=0,那么你就有无限沙子,从而无限石油,从而就有无限金子
            • 如果e不等于0,就是六个值都不等于0,那么就套用上面的式子即可。

神仙题。。。。。。。。。。。。。

矩阵循环

【问题描述】

给出一个N行M列的01矩阵,现在我们每次可以将某一行整体循环左移一位,或者将某一行整体循环右移一位.(例如11000循环右移一位会变成01100,而循环左移一位会变成10001)现在要求你用最少的步数,来使得这个矩阵里至少有一列全部都是1.为了方便你只需要输出这个步数。

【输入格式】

从文件 b.in 中读入数据。

第一行两个整数N,M,描述矩阵的大小。

接下来?,每行一个长度为M的01串。

【输出格式】

输出到文件 b.out 中。

一行输出答案.如果无论如何也不存在解就输出−1.

【样例输入】

3 6
101010
000100
100000

【样例输出】

3

【数据规模】

对于30%的数据,N,M≤ 5.

对于20%的数据,每行至多有一个1.

对于20%的数据,M≤ 100

对于30%的数据,没有任何限制。

以上的数据档互不相交.

对于所有的数据,满足1 ≤ N ≤ 100, 1 ≤ M ≤ 10^4.

【题解】

处理一个数组,f[i][j]表示让第i行第j列有1(别的列不管),第i行需要旋转的次数

让所有1的位置bfs即可

GMPotlc提供了更好的做法:维护一个向左一个向右然后取min(但是好像需要开三倍数组)

每一列的f相加为让最后所有1在这一列上的答案

答案为所有列取min

注意如果有一行全是0,那么肯定无解,那么这一行的f设成0x3f3f3f3f即可,其实有更好的做法一开始直接判断。

最短路

【问题描述】

你来到了一个陌生的世界,这个世界,是一座完整的城市。

这座城市由N条东西向和M条南北向的街道构成,分别标号为1, 2, ...., N,两边都是一样。令(x,y)为第x条南北向街道和第y条东西向街道构成的交点。

在这座城市,街道之间的距离基本都是固定,且只会是1或者5.第i条南北向街道与第i+1条南北向街道的距离是D_i,第i条东西向街道与第i+1条东西向街道的距离是E_i。

初来乍到,第一件该做的事情就是熟悉街道。你一共熟悉了Q天街道,每天从(Sx,Sy)跑到(Ex,Ey).你只能够沿着街道走,并且不能跑到边界之外(最边上的街道就是边界).同时,这个城市有个奇怪的规定,若你正在走一条南北向的街道,到下一个路口,就必须走东西向的街道。(具体看图,注意图中的不一定是最优解).

其实题面少一句:若你正在走一条东西向的街道,到下一个路口,就必须走南北向的街道。这句话在样例1中没有体现,但在样例2(下面的样例2为评测时的第一个测试点)中体现了。如果没有这句话,第三题的答案应该为11而非13(by ghj1222)

现在你想知道,对于这Q天每天你最少需要走多少距离。

【输入格式】

从文件 c.in 中读入数据。

第一行,两个正整数n,Q.

第二行,N-1个整数D_i.

第三行,N-1个整数E_i.

接下来Q行,每行四个正整数Sx,Sy,Ex,Ey.

【输出格式】

输出到文件 c.out 中。

Q行,,每行一个整数.

【样例输入1】

10 3
5 1 5 5 5 1 1 5 5
1 5 5 5 1 5 5 1 5
4 3 9 10
9 2 2 9
5 1 5 10

【样例输出1】

46
50
49

【样例输入2】

5 5
1 5 1 5 
1 1 1 5 
3 3 2 1
2 4 3 1
4 4 5 5
2 2 5 2
5 4 3 2

【样例输出2】

7
10
10
13
8

【数据规模】

对于10%的数据,\(N,Q\le5\).

对于30%的数据,\(N,Q\le100\).

对于60%的数据,\(N,Q\le1000\).

对于100%的数据,\(1\le N,Q\le100000,1\le Sx,Sy,Ex,Ey\le N\).

【题解】

大水题。。。

可以当做最短路做,可以拆点,也可以连斜边(by olinr)

注意到交换Sx和Ex,交换Sy和Ey答案不变

其实横纵坐标是分开的

我们设dx=|Ex-Sx|,dy=|Ey-Sy|,那么如果|dx-dy|<=1,那么可以直接走过去而不用绕远。处理出横纵坐标前缀和直接输出即可。

那么如果大于1呢?我们假设dx-dy>1(dy-dx>1同理不写了),那么说明在x坐标上走的比较长,因为需要交替的走,所以y坐标上需要绕远一下。我们把从Sy到Ey的称为基础的路程,那么剩下就是绕远的路程了。我们绕远绕一个来回,那么不难推出有\(\displaystyle\frac{dx-dy}{2}\)个来回。设他为rest。

由于我们要找最短距离,所以尽量绕小的,也就是1的格子。

如果从Sy到Ey中途有1那么就太棒了,直接在中途绕就行了。答案为rest*2

如果从Sy到Ey中途没有1,那么有两种解决方案:

一是在中途绕长度为5的格子。。。rest*10

二是离开Sy到Ey的区间取区间外面寻求长度为1的格子。假设我们在区间外部走了dis的距离,走到了一个临近长度为1的格子的格点,那么答案为dis*10+(rest-dis)*2。注意可能出现rest-dis<0的情况,就是我们走不到一个长度为1的格子,那么暴力一点直接和0取max,

答案为这两种情况取min呢

那么怎么求dis呢?怎么判断区间里是否有1呢

我们预处理一个数组lx[i]和rx[i],表示i向左/右走能走到长度为1的格子需要走的距离。如果i这个点与一个长度为1的格子相邻,那么lx[i]=rx[i]=0。这个数组不难用O(N)的复杂度递推出来。

对于一个区间,处理出两个端点的l和r,其中dis为左端点l和右端点r取min,如果左端点r和右端点l小于等于区间长度(事实上这两个同时满足或同时不满足)那么就有1在区间内。

转载于:https://www.cnblogs.com/oier/p/9816484.html

### 回答1: Obeaver 10.19.3是一种开源的数据库管理工具,可以用于管理和查询不同类型的数据库。安装包是安装这个工具所需要的软件包。 要安装Obeaver 10.19.3,您可以按照以下步骤进行操作: 1. 首先,您需要在Obeaver的官方网站下载安装包。您可以通过在搜索引擎中搜索“Obeaver 10.19.3下载”来找到官方网站。官方网站通常提供适用于不同操作系统的安装包,您需要根据您的操作系统选择正确的版本。 2. 一旦您下载了安装包,双击运行它。在某些操作系统中,您可能需要右键单击安装包并选择“运行”或“以管理员身份运行”。 3. 安装程序将引导您完成安装过程。您需要阅读并接受许可协议,并选择安装位置。您还可以选择您希望在桌面上创建快捷方式的选项。 4. 在安装过程中,系统可能会要求您提供管理员权限或输入管理员密码。请根据系统的提示操作。 5. 当安装完成后,您可以在开始菜单、桌面或安装位置找到Obeaver的快捷方式。双击快捷方式即可打开Obeaver。 安装完成后,您可以开始使用Obeaver来管理和查询数据库。您可以连接到不同类型的数据库,如MySQL、Oracle、Microsoft SQL Server等,并执行各种操作,如创建表、插入数据、查询数据等。 总结: Obeaver 10.19.3是一种开源数据库管理工具,安装包是安装这个工具的软件包。安装Obeaver通常包括下载安装包,运行安装程序,按照安装步骤进行操作,并在安装完成后打开Obeaver。 ### 回答2: Obeaver 10.19.3是一个用于数据库管理和查询的开源软件。安装包是指用于安装该软件的程序包。 要安装Obeaver 10.19.3,您可以按照以下步骤进行操作: 1. 打开Obeaver的官方网站(https://dbeaver.io/)并导航到下载页面。 2. 在下载页面上,找到并点击适用于您操作系统的版本(如Windows、Mac或Linux)的下载链接。 3. 下载安装包并等待下载完成。 4. 打开您的下载文件夹,并找到刚刚下载的Obeaver 10.19.3安装包。 5. 双击安装包文件以运行安装程序。 6. 按照安装程序的指示进行操作。通常情况下,您需要阅读并同意许可协议,选择安装位置和其他选项。 7. 安装完成后,您可以在开始菜单(Windows)或应用程序文件夹(Mac)中找到Obeaver的快捷方式。 8. 启动Obeaver并进行必要的设置,如数据库连接配置。 9. 连接到您的数据库并开始使用Obeaver进行数据库管理和查询。 总结而言,要安装Obeaver 10.19.3,您需要下载合适的安装包并按照安装程序的指示进行操作。安装完成后,您可以开始使用Obeaver来管理和查询数据库。 ### 回答3: Obeaver 10.19.3是一个开源的数据库管理工具,可以帮助用户轻松地管理和查询各种类型的数据库。安装Obeaver 10.19.3非常简单,只需按照以下步骤进行操作: 1. 首先,打开Obeaver的官方网站(https://dbeaver.io/)并下载最新版本的安装包。注意,根据你的操作系统选择正确的版本(Windows、Mac或Linux)。 2. 下载完成后,双击安装包进行安装。在Windows上,可能会要求你选择安装目录和其他选项。按照提示完成安装向导。 3. 安装完成后,打开Obeaver。第一次运行时,可能需要进行一些初始化设置,例如选择默认语言和外观主题。根据个人偏好和需求进行设置。 4. 在Obeaver中,你可以创建新的数据库连接。点击“新连接”按钮,然后选择你要连接的数据库类型(如MySQL、Oracle、SQL Server等)。 5. 输入数据库的连接信息,例如主机名、端口号、用户名和密码等。确认无误后,点击“测试连接”按钮,确保连接成功。 6. 连接成功后,你将能够查看和管理数据库中的表、视图和数据。使用Obeaver的各种功能和工具,如SQL查询编辑器、数据导入导出、数据比较和同步等,可以更好地管理和操作数据库。 总之,安装Obeaver 10.19.3非常简单,只需下载安装包并按照安装向导进行操作即可。安装完成后,你将能够方便地管理和查询各种类型的数据库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值