codeforces bye 2023

文章讨论了基于奇偶性的数列操作策略,如计算两数之和的调整规则,并给出了如何生成特定位数平方数的技巧,针对玛莎和奥莉的不同需求优化操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A

若序列存在则,保留的序列b乘积一定小于2023且能被2023整除。又由于可以删除1,则将删去的数看为一个数乘一堆1,保证必须用的数最小

B

1<=a<b<x

lcm(a,b)的最大除数为a,b,但lcm可能等于b,所以在乘b/gcd(a,b)

原理从示例中推出

C

\left \lfloor \frac{a+b}{2}\right \rfloor \ast 2

若a,b同奇偶则值为a+b;否则值为a+b-1

进一步来说

1.a与b同为偶数,则结果不变,偶数个数-1,奇数不变

2.a与b同为奇数,则结果不变,奇数个数-2,偶数+1

3.a与b不同奇偶,则结果-1,奇数个数-1,偶数不变

对于玛莎,要求结果尽可能大,选1和2都可以。但要减少情况,满足不同奇偶的数减少,即奇偶中一方减少,一方增加,最终只剩一方。所以选2

而奥莉,要求结果尽可能小,选3

因为玛莎先手所以,一定会产生一个偶数给后手用,所以奥莉只需序列中有奇数就可以-1

但有时奇数个数只有1个,轮到玛莎也只能选3,之后奇数全消,结果不变

所以正常一轮减3个奇数,当只有两个奇数数时不减,当只有一个奇数时减1,当只有一个数时直接输出



import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int T=input.nextInt();
		while(true) {
			if(T==0) break;
			int n=input.nextInt();
			long[] a=new long[n+1];
			long sum=input.nextLong();
			long num=0;
			if(sum%2!=0)num++;
			System.out.print(sum+" ");
			
			for(int i=2;i<=n;++i) {
				long x=input.nextLong();
				if(x%2!=0)num++;
				sum+=x;
				if(num%3==0) {
					System.out.print(sum-(num/3)+" ");
				}else if(num%3==2) {
					System.out.print(sum-(num/3)+" ");
				}else {
					System.out.print(sum-(num/3)-1+" ");
				}
				
			}System.out.println();
			T--;
		}
		
	}
	
}

D

发现若x满足n位,则x*100满足n+2位

所以所有的n位长度平方数都可以由n-2位的数*100再加上加入两个数。

\left ( 1\ast 10^{n-1} + 6\ast 10^{\tfrac{n-1}{2}} + 9 \right ) = \left ( 10^{\tfrac{n-1}{2}} + 3 \right ) ^{2}

\left ( 9\ast 10^{n-1} + 6\ast 10^{\tfrac{n-1}{2}} + 1 \right ) = \left ( 3 \ast 10^{\tfrac{n-1}{2}} + 1 \right ) ^{2}

由上可知在中间数的左右两边加0仍为平方数,所以再加上1……060……9和9……06……1即可

题目声明对于给出的n一定有解,所以n不为偶数

所以对于所有奇数都可以由n=3的基平方数得到,即为169,961,196

对于n=1特判

import java.util.Scanner;
 
public class Main{
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int T=input.nextInt();
		while(true) {
			if(T==0) break;
			int n=input.nextInt();
			if(n==1) {
				System.out.println("1");
				T--;
				continue;
			}
			System.out.print("196");
			for(int i=4;i<=n;++i)System.out.print("0");
			System.out.println();
			int t=n-1;
			int o=0;
			while(t!=0) {
				t-=2;
				System.out.print("1");
				for(int i=1;i<=o;++i)System.out.print("0");
				System.out.print("6");
				for(int i=1;i<=o;++i)System.out.print("0");
				System.out.print("9");
				for(int i=3+2*o+1;i<=n;++i)System.out.print("0");
				System.out.println();
				System.out.print("9");
				for(int i=1;i<=o;++i)System.out.print("0");
				System.out.print("6");
				for(int i=1;i<=o;++i)System.out.print("0");
				System.out.print("1");
				for(int i=3+2*o+1;i<=n;++i)System.out.print("0");
				System.out.println();
				o++;
			}
			T--;
		}
		
	}
	
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值