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

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

时间:2024-10-02 17:46:43浏览次数:5  
标签:yy int 题解 Day2 cin ROIR cdot xx

法1

枚举 \(a,b,c\),考虑到 \(c\) 的最小值为 \(\max(1,\frac{(a\cdot b−n)}{b})\),所以直接剪枝即可通过。

代码:

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

法2

想法来自于:https://www.cnblogs.com/7KByte/p/15567809.html

枚举 \(a\) 和 \(c\) ,使用扩展欧几里得算法来求解不定方程 \(a \cdot b - c \cdot d = \gcd(a,c)\) 然后变换成 \(a \cdot b - c \cdot d = n\)。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,x;
int exgcd(int a,int b,int &x,int &y){
	if(!b){
		x=1,y=0;
		return a;
	}
	int xx=0,yy=0;
	int g=exgcd(b,a%b,xx,yy);
	x=yy,y=xx-a/b*yy;
	return g;
}
int main(){
	cin>>n>>x;
	int ans=0;
	for(int a=2;a<=n;a++){
		if(a!=x){
			for(int c=1;c<=a-1;c++){
				int b=0,d=0;
				int g=exgcd(a,c,b,d);
				if(n%g) continue;
				int k=n/g,kb=c/g,kd=a/g;
				b*=k,b=(b%kb+kb)%kb;
				d=(n-a*b)/c;
				while(b>-d){
					if(d<0&&b!=x)ans++;
					b+=kb,d-=kd;
				}
			}	
		}
		
	}
	cout<<ans;
	return 0;
}

标签:yy,int,题解,Day2,cin,ROIR,cdot,xx
From: https://www.cnblogs.com/cly312/p/18444921

相关文章

  • 题解:UVA124 Following Orders
    考虑深搜和拓扑排序。从入度为零的节点开始,逐步添加到当前的排列结果中,并在每一步递减相邻节点的入度。如果某个节点的入度变为零,就递归地将其添加到当前排列中。一旦达到排列的叶节点,就存储起来,并按字典顺序排序。代码:#include<bits/stdc++.h>usingnamespacestd;voidread......
  • 题解:UVA117 The Postal Worker Rings Once
    此题要求我们求欧拉回路的长度。使用Floyd算法计算图中任意两点之间的最短路径,对于度数为奇数的路口(最多有两个),找到它们之间的最短路径并将其加入总路径长度中。代码:#include<bits/stdc++.h>#defineINF1e8usingnamespacestd;intdegree[26];intpath[26][26];intal......
  • 题解:SP15553 STC00 - Hamsters
    首先,通过预处理计算每个名字的哈希值,然后利用哈希检查名字之间的最长公共前缀,从而确定从一个名字转移到另一个名字的最小代价。使用倍增动态规划计算转移的最小成本,\(f_{t,i,j}\)表示从名字\(i\)经过\(2^t\)步转移到名字\(j\)的最小代价,最后通过位运算处理\(M\)次转移的......
  • 题解:AT_abc373_d [ABC373D] Hidden Weights
    可以发现一个性质:对于图的每个连通分量,一旦在其中任何顶点上的值固定,则所有写入的值都是确定的。我们可以逐个DFS每个连通分量,按照题目的要求给每个点赋值,初始搜索的点值设成\(0\)即可。代码:#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,m;......
  • 题解:SP19382 STK - Stock
    一道动态规划题。先分析状态。\(dp_{i\operatorname{and}1,k}\):表示在第\(i\)天最多进行\(k\)次交易的最大利润。\(s_{i\operatorname{and}1,k}\):表示在第\(i\)天之前的某天卖出之后,最多进行\(k-1\)次交易的最大利润减去当天的价格。接下来分析转移方程当\(i=0\)......
  • 题解:SP23875 DCEPC14A - Another Version of Inversion
    我们注意到这道题是二维的,所以要用到二维树状数组,不会的可以看一下这篇文章。这题的思路和P1908很像,按价值从大到小排序,排完序之后用树状数组维护,每次把这个数的位置加入到树状数组中,因为是排完序之后,所以之前加入的一定比后加入的大,然后在查询当前这个数前面位置的数(是前面位......
  • 题解:SP20038 SNGLOOP1 - Easiest Loop 1
    数学题。根据题目中给出的等式:\[(2n+3)(p-1)+\frac{4}{5}[(p\cdot{S}_{n})-{S}_{m}]=2(m-n)\]变形:\[(10n+15)(p-1)+4[(p\cdot{S}_{n})-{S}_{m}]=10m-10n\]\[(10m+15)p-10m-15+4{S}_{n}p-4{S}_{m}=10m-10n\]\[(10m+15+4{S}_{n})p=10m+15+4{S}_{m}\]\[p=\frac{10m+15+4{S}......
  • 题解:P1701 [USACO19OPEN] Cow Evolution B
    这题的关键就在于能否将问题转化成集合之间是否有交集。首先,考虑一个我们无法形成进化树的例子,例如这样:31fly1man2flyman如果我们想根据这个输入构建一棵树,我们需要在根上分割A或B,但剩下的两个子树都需要有一条边来添加另一个特征。显然输出为"No"。如果我们输入......
  • 题解:SP4555 ANARC08F - Einbahnstrasse
    一道多源最短路问题,肯定用Floyd,还有个问题就是怎么处理输入。使用sscanf(edge+2,"%d",&cost);从edge的第三个字符开始读取边权,然后处理左右两侧的箭头即可。#include<bits/stdc++.h>usingnamespacestd;map<string,int>cn;intct;intq[1028];intadd_city(constch......
  • 题解2:SP5449 ANARC09A - Seinfeld
    思路:考虑贪心。统计未配对的{:当遇到一个{时,增加未配对的{数量。当遇到一个}时,有两种情况:如果有多余的{,那么就用这个}与之前的{配对。如果没有多余的{,增加\(1\)次。遍历结束后:当我们遍历完字符串后,可能还会剩下一些未配对的{,需要通过将一部分{......