首页 > 其他分享 >P1763 埃及分数(100分Unaccepted) 被hack qwq

P1763 埃及分数(100分Unaccepted) 被hack qwq

时间:2023-12-30 11:35:45浏览次数:32  
标签:分数 frac P1763 dfrac ll 45 19 hack Unaccepted

I don't know how to do that fucking things.

埃及分数

题目描述

来源:BIO 1997 Round 1 Question 3

在古埃及,人们使用单位分数的和(形如 \(\dfrac{1}{a}\) 的,\(a\) 是自然数)表示一切有理数。如:\(\dfrac{2}{3} = \dfrac{1}{2} + \dfrac{1}{6}\),但不允许 \(\dfrac{2}{3} = \dfrac{1}{3} + \dfrac{1}{3}\),因为加数中有相同的。对于一个分数 \(\dfrac{a}{b}\),表示方法有很多种,但是哪种最好呢?首先,加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越好。如:

\[\begin{aligned} \frac{19}{45} &= \frac{1}{3} + \frac{1}{12} + \frac{1}{180}\\ \frac{19}{45} &= \frac{1}{3} + \frac{1}{15} + \frac{1}{45}\\ \frac{19}{45} &= \frac{1}{3} + \frac{1}{18} + \frac{1}{30}\\ \frac{19}{45} &= \frac{1}{4} + \frac{1}{6} + \frac{1}{180}\\ \frac{19}{45} &= \frac{1}{5} + \frac{1}{6} + \frac{1}{18}\\ \end{aligned} \]

最好的是最后一种,因为 \(\dfrac{1}{18}\) 比 \(\dfrac{1}{180}, \dfrac{1}{45}, \dfrac{1}{30}\) 都大。
注意,可能有多个最优解。如:

\[\begin{aligned} \frac{59}{211} &= \frac{1}{4} + \frac{1}{36} + \frac{1}{633} + \frac{1}{3798}\\ \frac{59}{211} &= \frac{1}{6} + \frac{1}{9} + \frac{1}{633} + \frac{1}{3798}\\ \end{aligned} \]

由于方法一与方法二中,最小的分数相同,因此二者均是最优解。

给出 \(a,b\),编程计算最好的表达方式。保证最优解满足:最小的分数 \(\ge \cfrac{1}{10^7}\)。

输入格式

一行两个整数,分别为 \(a\) 和 \(b\) 的值。

输出格式

输出若干个数,自小到大排列,依次是单位分数的分母。

样例 #1

样例输入 #1

19 45

样例输出 #1

5 6 18

提示

\(1 \lt a \lt b \lt 1000\)

上代码(附解释)

/*
在古埃及,人们使用单位分数的和(形如1/a的, a是自然数)表示一切有理数。
 如:2/3=1/2+1/6,但不允2/3=1/3+1/3,因为加数中有相同的。
 对于一个分数a/b,表示方法有很多种,但是哪种最好呢?
 首先,加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越 好。
如: 19/45=1/3 + 1/12 + 1/180
19/45=1/3 + 1/15 + 1/45
19/45=1/3 + 1/18 + 1/30
19/45=1/4 + 1/6 + 1/180
19/45=1/5 + 1/6 + 1/18.
最好的是最后一种,因为1/18比1/180,1/45,1/30,1/180都大。 给出a,b(0<a<b<1000),编程计算最好的表达方式
 */
/*
in:
19 45
out:
5 6 18
*/
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <iostream>
#define ll long long
#include <algorithm>
using namespace std;
#define endl "\n"
//depth:最多允许的层数,temp:边搜边存结果
//ans:存储最优解(擂主)
ll depth,temp[1001],ans[1001];
bool flag=0;
ll gcd(ll a,ll b) {
	return b==0?a:gcd(b,a%b);
}
//分子是a,分母是b 递归树层数step
void dfs(ll a,ll b,ll step) {
	if (step==depth) {
		if (a==1) { //最后一个分子是1
			temp[step]=b;
			//最后一个分母第一次赋值(搜索到第一个可行解),或者比之前的分母小,更新答案
			if (ans[step]==0||temp[step]<ans[step]){
				flag=1;
				copy(temp,temp+depth+1,ans);
			}
		}
		//无论是否成立,都必须return,不然就超过递归树的层数
		return;
	}
	ll first=b%a!=0?b/a+1:b/a;
	//起始值要么是上一个数字+1,要么是ceil(b/a)
	int st=max(temp[step-1]+1,first);
	//终点是分母允许的最大值(考虑剩余层数)
	int ed=(b/a)*(depth-step+1);
//	if(depth==3&&a==19&&b==45){
//		cout<<"调试信息:";
//		cout<<st<<" "<<ed<<endl;
//	}
	for(ll i=st; i<=ed; i++) {
		temp[step]=i;
		ll nexta,nextb,g;
		//分数的减法,nextb为通分的值
		//a/b - 1/i
		//a*i/b*i - b/b*i
		nexta=a*i-b,nextb=b*i;
		g=gcd(nexta,nextb);//求gcd便于约分
		dfs(nexta/g,nextb/g,step+1);
	}
}

int main() {
	ll a,b;
	cin>>a>>b;
	ll g=gcd(a,b);
	temp[0]=1;
	for(depth=1;depth<=b; depth++) {
		memset(ans,0,sizeof(ans));
		dfs(a/g,b/g,1);
		if (flag) break;
	}
	for(int i=1; i<=depth; i++)
		printf("%lld ",ans[i]);
	return 0;
}

how to do that?

https://www.luogu.com.cn/record/141385042 get 100 but unaccepted
https://www.luogu.com.cn/record/105330451 get 100 and accepted

正解

https://www.luogu.com.cn/problem/solution/P1763

标签:分数,frac,P1763,dfrac,ll,45,19,hack,Unaccepted
From: https://www.cnblogs.com/WYX1210/p/17936172.html

相关文章

  • [EFI]联想Lenovo Air 13 IWL笔记本电脑 Hackintosh 黑苹果efi引导文件
    硬件型号驱动情况主板联想LenovoAir13IWL笔记本处理器Intel(R)Core(TM)[email protected]已驱动内存16GB1867MHzMicron(BIOS可超频至2133MHzLPDDR3)已驱动硬盘海力士HFS512GD9TNG-62A0A(512GNVME固态)已驱动显卡IntelUHDGraphics620(8086:3EA0WhiskeyLake)(......
  • [EFI]Lenovo Thinkpad W541电脑 Hackintosh 黑苹果efi引导文件
    硬件型号驱动情况主板LenovoThinkpadW541处理器Intel®Core™i7-4800MQ已驱动内存16GBDDR3L1600MHz已驱动硬盘KingstonA400512gb已驱动显卡Intel®HDGraphics4600已驱动声卡RealtekALC292已驱动有线网卡Intel®EthernetConnectionI217已驱动无线网卡+蓝牙Intel®Wi......
  • hackthebox absolute insane
     信息收集Payattentiontothelastlinessl-date:wehave7hourclockskew,whichshouldkeepinmindifdoinganykeberosauth.SMB-TCP445smbclient-N-L//10.10.11.181#对面拒绝连接crackmapexecsmbabsolute.htb  #对面存在smbcrackmapexec......
  • [EFI]华硕VivoBook FL8700JP (X509JP) 电脑 Hackintosh 黑苹果efi引导文件
    硬件型号驱动情况主板华硕VivoBookFL8700JP(X509JP)处理器i7-1065G7已驱动内存8GB+4GBDDR4已驱动硬盘西数512GSSD已驱动显卡IntellrisPlusGraphics已驱动声卡RealtekALC256已驱动有线网卡无无无线网卡+蓝牙IntelWireless-AC9461已驱动支持系统版本macosCatalina(10.15)—......
  • [EFI]Gigabyte-Z790-Aorus-Elite-AX-13700K电脑 Hackintosh 黑苹果efi引导文件
    硬件型号驱动情况主板GigabyteZ790AorusEliteaxDDR5处理器I713700K已驱动内存8GBDDR3(orsomethinglikethat)已驱动硬盘WDCPCSN730SDBQNTY-256G-1001已驱动显卡GigabyteRX6600EAGLE8G已驱动声卡RealtekALC285已驱动网卡LucyRTL8125Ethernet已驱动无线网卡+蓝牙Int......
  • [EFI]联想Thinkpad X1 (2020)电脑 Hackintosh 黑苹果efi引导文件
    硬件型号驱动情况主板ThinkpadX1Carbon处理器IntelCorei5-10210U(formerlyCometLake)已驱动内存8GBDDR3(orsomethinglikethat)已驱动硬盘WDCPCSN730SDBQNTY-256G-1001已驱动显卡IntelUHD620+NvidiaGeForceMX250(屏蔽)无法驱动声卡RealtekALC285已驱动网卡Intel......
  • CF468C Hack it! 题解
    题意:给出一个数\(a\),构造一组\(l,r\)使得\(\sum_{i=l}^rf(i)\equiv0\pmoda\)。其中\(a\leq10^{18}\),\(l,r\leq10^{200}\)。分析:以下用\((l,r)\)表示构造出来的一对\(l,r\),\(f(l,r)=\sum_{i=l}^rf(i)\)。考虑从某个值一步一步移动到模\(a\)余\(0\)的情况。......
  • hackthebox broscience medium
    Brieflyinstruction:Thistime,thetargetmachineencoutersomeurlcoding,phpcodeauditfounddeserialization,scriptwritingaccordingtothecontent,pgsqlinjection,hashcatblastingwithsaltvalueandpspyfoundautomaticallyrunscripts.Afterauditin......
  • hackthebox bagel medium
    Flaskexploit /proc/self/cmdlineunderstandswhichprocessiscurrentlyrunningtoprovicethewebservice.curlhttp://10.10.11.201:8000/?page=../../../../../../proc/self/cmdline-o-Abouttheflask:Afterweknowwhichpyfileiscurrentlyrunningt......
  • tryhackme进攻性渗透测试-Advanced Exploitation 高级利用
    SteelMountain侦察Nmap-sC-sV-O$IP-oNbasic_scan.nmapNmap-script=vuln$IP-oNvuln_scan.nmap总之,masscan在eth0上工作,所以SYN端口探测技术全部没有响应包需要一个flag把探测流量正确的打入tun0中masscan-p808010.10.205.233-etun0nmap除了使用SYN端口......