• [CSP-J 2022] 解密


    蒟蒻思路的来源

    这道题CCF还是放了很多水分在里面;首先看数据范围:

    以下记 m = n − e × d + 2 m = n - e \times d + 2 m=ne×d+2

    是不是很熟悉?是的,这题CCF贴心提示我们用韦达定理和求根公式;

    思路分析

    首先,对 e i × d i e_i \times d_i ei×di进行化简:
    e i × d i = ( p i − 1 ) ( q i − 1 ) + 1 = p i × q i − ( p i + q i ) + 2 = n i − ( p i + q i ) + 2 e_i \times d_i =(p_i-1)(q_i-1)+1 \\ =p_i \times q_i -(p_i+q_i)+2 \\ =n_i-(p_i+q_i)+2 ei×di=(pi1)(qi1)+1=pi×qi(pi+qi)+2=ni(pi+qi)+2
    因此,移项可得:
    { p i + q i = n i + 2 − e i × d i = − b a p i × q i = n i = c a \left\{

    pi+qi=ni+2ei×di=bapi×qi=ni=ca" role="presentation">pi+qi=ni+2ei×di=bapi×qi=ni=ca
    \right. {pi+qi=ni+2ei×di=abpi×qi=ni=ac
    我们可以构造方程: a x 2 + b x + c = 0 ax^2+bx+c=0 ax2+bx+c=0

    即: x 2 + ( e i × d i − n i − 2 ) x + n = 0 x^2+(e_i \times d_i-n_i-2)x + n=0 x2+(ei×dini2)x+n=0

    根据求根公式,有: Δ = b 2 − 4 a c = ( e i × d i − n i − 2 ) 2 − 4 × 1 × n i = ( e i × d i − n i − 2 ) 2 − 4 × n i ( Δ ≥ 0 ) \Delta = b^2-4ac = (e_i \times d_i-n_i-2)^2-4 \times 1 \times n_i =(e_i \times d_i-n_i-2)^2 - 4 \times n_i (\Delta \ge 0) Δ=b24ac=(ei×dini2)24×1×ni=(ei×dini2)24×ni(Δ0)

    所以,有:

    q i / p i = − b ± b 2 − 4 a c 2 a = − ( e i × d i − n i − 2 ) ± ( e i × d i − n i − 2 ) 2 − 4 × n i 2 q_i / p_i={\small{-b \pm \sqrt{b^2-4ac}\over 2a}}= {\small \frac{-(e_i \times d_i-n_i-2) \pm \sqrt{(e_i \times d_i-n_i-2)^2 - 4 \times n_i} }{2}} qi/pi=2ab±b24ac =2(ei×dini2)±(ei×dini2)24×ni

    最后输出即可;但是要注意 q i p i q_ip_i qipi均为整数!

    AC Code

    	#include
    using namespace std;
    long long k,n,e,d;
    long long b,c,drt;
    long long x,y;
    int main(){
    	scanf("%lld",&k);
    	while(k--){
    		scanf("%lld%lld%lld",&n,&e,&d);
    		c=n;
    		b=e*d-n-2;
    		drt=b*b-c-c-c-c;
    		if(drt<0){
    			printf("NO\n");continue;
    		}
    		if(sqrt(drt)*sqrt(drt)!=drt){
    			printf("NO\n");continue;
    		}
    		drt=sqrt(drt);
    		if((-b+drt)%2==1){
    			printf("NO\n");continue;
    		}
    		x=(-b+drt)/2;
    		y=(-b-drt)/2;
    		if(x<=0||y<=0){
    			printf("NO\n");continue;
    		}
    		printf("%lld %lld\n",y,x);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    【笔记】samba shell 脚本 离线安装 - Ubuntu 20.04
    【Java分享客栈】未来迈向高级工程师绕不过的技能:JMeter压测
    Java 工程师面试题汇总,全会月薪至少 3W
    The 19th ZCPC -G. Easy Glide
    Java:Springboot 实现热部署的两种方式
    大连大学计算机考研资料汇总
    实景三维渐成测绘大趋势,数据存储迎来新风口
    Java的stream流多个字段排序
    银河麒麟4.0Kylin桌面版安装Java环境
    CentOs程序环境准备
  • 原文地址:https://blog.csdn.net/Kochakin/article/details/127833073