首页 > 其他分享 >题解:P9788 [ROIR 2020 Day2] 区域规划

题解:P9788 [ROIR 2020 Day2] 区域规划

时间:2024-08-22 11:30:07浏览次数:10  
标签:false cout int 题解 Day2 cin sync ROIR tie

题目传送门

思路

首先我们看下数据范围, $n <= 3000$ ,范围很小,所以暴力枚举。
于是第一份代码出来了。

#include<bits/stdc++.h>
using namespace std;
int s,a,b,c,d,n,m;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(),cout.tie();
	cin>>n>>m;
	for(a=1;a<=n;a++)
	{
		for(b=1;b<=n;b++)
		{
			for(c=1;c<a;c++)
			{
				for(d=1;d<b;d++)
				{
					if(a==m||b==m)
						continue;
					if(a*b-c*d==n)
						s++;
				}
			}
		}
	}
	cout<<s;
}

但是只有37分。


然后考虑优化。
题目最主要的条件是 $a * b - c * d = n$ 变下形可得 $n + c * d = a * b$ ,再考虑下范围。
于是第二份代码出来了。

#include<bits/stdc++.h>
using namespace std;
int s,a,b,c,d,n,m;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(),cout.tie();
	cin>>n>>m;
	for(c=n-2;c>=1;c--)
	{
		for(d=n-c;d>=1;d--)
		{
			for(a=n-1;a>c;a--)
			{
				if((n+d*c)%a||(n+d*c)/a<=d)
					continue;
				b=(n+d*c)/a;
				if(a!=m&&b!=m&&a*b-c*d==n)
					s++;
			}
		}
	}
	cout<<s;
}

但这样写也只有51分


那我们换一种思路。
因为 $a$ 与 $b$ 不能等于 $m$ 所以我们放在前面,减少循环次数。
我们考虑一下 $a * b$ 的大小。

  • 首先 $a * b - c * d = n$ ,所以$a * b$小于 $n$ 的话直接往下走

另外考虑一下 $a$ 与 $b$ 的大小关系。
我们枚举一下,可以发现 $a$ 与 $b$ 的值总是在 $1 \sim n$ 之间。而且当 $a !=b$ 时,a b c db a c d 两个顺序都成立,同时c的最小值为 $max(1,(a*b-n)/b)$ ,于是我们可以这样。

for(a=1;a<=n;a++)
	{
		if(a==m)
			continue;
		for(b=a;b<=n;b++)
		{
			if(b==m||a*b<=n)
				continue;
			for(c=max(1,(a*b-n)/b);c<a;c++)
			{
			}
		}
	}

最后结合题目要求判断就行了。

代码

#include<bits/stdc++.h>
using namespace std;
int s,a,b,c,d,n,m;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(),cout.tie();
	cin>>n>>m;
	for(a=1;a<=n;a++)
	{
		if(a==m)
			continue;
		for(b=a;b<=n;b++)
		{
			if(b==m||a*b<=n)
				continue;
			for(c=max(1,(a*b-n)/b);c<a;c++)
			{
				d=a*b-n;
				if(d%c!=0||d/c>=b)
					continue;
				s++;
				if(a!=b)
					s++;
			}
		}
	}
	cout<<s;
}

标签:false,cout,int,题解,Day2,cin,sync,ROIR,tie
From: https://www.cnblogs.com/zhanghui2021/p/18373459

相关文章

  • 题解:P9784 [ROIR 2020 Day1] 超速
    传送门思路我们设\(T\)为所花的总时间,\(d\)为超速多少。然后不难知道$T=\sum_{i=1}^{n}\frac{l_i}{v_i+d}$,所以我们实际上是要找到符合条件最小的\(d\)。再结合题目所说最高被罚款的金额最少,然后二分枚举答案即可。时间复杂度\(O(nq\log(m))\)。AC代码#include......
  • 题解:P10892 SDOI2024
    题解:P10892SDOI2024题目传送门题目思路通过阅读题面,我们可以看出,其实对于每一次纠结,如果交出了\(\frac{n-1}{2}\)只猫猫,则剩下的为\(\frac{n+1}{2}\)只猫猫;如果交出了\(\frac{n+1}{2}\)只猫猫,则剩下的为\(\frac{n-1}{2}\)只猫猫。为了使纠结的次数尽可能小,我们要交出......
  • 启动应用程序出现pspluginwkr.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个pspluginwkr.dll文件(挑选合适的版本文件)把......
  • 启动应用程序出现ptpprov.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个ptpprov.dll文件(挑选合适的版本文件)把它放......
  • 洛谷 P2590 [ZJOI2008] 树的统计 题解
    题目大意给你一个\(N\),然后再给你两个长度为\(N\)的序列。让你构造一个仅有\(0\)和\(1\)的\(N\timesN\)的正方形,但是要满足两个序列的顺序:第一个序列指的是该正方形每一行所构成的二进制数的大小顺序。第二个序列指的是该正方形每一列所构成的二进制数的大小顺序。......
  • [ARC181C] Row and Column Order 题解
    题目大意给你一个\(N\),然后再给你两个长度为\(N\)的序列。让你构造一个仅有\(0\)和\(1\)的\(N\timesN\)的正方形,但是要满足两个序列的顺序:第一个序列指的是该正方形每一行所构成的二进制数的大小顺序。第二个序列指的是该正方形每一列所构成的二进制数的大小顺序。......
  • 题解:AT_abc352_e [ABC352E] Clique Connect
    [题目通道]([ABC352E]CliqueConnect-洛谷)鄙人今日写人生第一篇题解希望管理大大通过首先,我们先看题:它说一共有n个点,m回操作。。。每次操作都有一个Ki和CiKi代表有Ki个点,Ci代表每条边所赋的边权一看就知道这是个最小生成树的板子我使用了著名的kruskal话......
  • P10892 题解
    思路考虑贪心策略。当剩下的猫猫数量为偶数的时候,直接取出\(\large\frac{n}{2}\)只猫猫即可。否则当剩下的猫猫数量为奇数的时候,则要尽可能保持第二天猫猫的数量为偶数。则要考虑\(n-\large\frac{n-1}{2}\)和\(n-\large\frac{n+1}{2}\)哪个是偶数。第二条化简一下就......
  • AGC003 题解
    目录A-WannagobackhomeB-SimplifiedmajhongA-Wannagobackhome注意到横纵坐标是独立的,因此可以分开考虑。考虑横坐标或纵坐标最终为零的充要条件为:没有出现任何关于它的任何操作(没有N和S,或没有W和E);出现所有关于它的任何操作(有向正方向走与往负方向走,如有......
  • CF2000 A~C 题解
    CodeforcesRound967(Div.2)A~C题解(未完待续)唐完了,B构造不会,C交互不会,整场爆切\(1\)题喜提\(-115\)rating强势上灰!我还会什么?I.2001A-MakeAllEqual先找出答案的下界。设众数为\(x\),其出现的次数为\(\operatorname{cnt}(x)\)。由于每次操作只能删除一个数,答......