当前位置: 首页 > news >正文

2023/3/21总结

题解:

E - 2xN Grid (atcoder.jp)

1.这一题,就是求出第一行与第二行相对应的相同数字的个数,看数据有多大,我们就知道,这道题目,是不可能穷举的。

2.因此,我们需要 找到规律去写它。此题需要用到前缀和算法。

3.我们需要记录数字和他所在的区间。然后根据区间的位置去判断,该数是否在俩列重合,从而,去相加对应的区间。

代码如下:

#include<stdio.h>
#define N 100010
struct node
{
	long long x;
	long long count;
}a[N][2];
int main()
{
	long long l,n1,n2,i,x,y,j,sum,max;
	scanf("%lld%lld%lld",&l,&n1,&n2);
	for(i=1;i<=n1;i++)
	{
		scanf("%lld %lld",&a[i][0].x,&a[i][0].count);
		a[i][0].count+=a[i-1][0].count;
	}
	for(i=1;i<=n2;i++)
	{
		scanf("%lld %lld",&a[i][1].x,&a[i][1].count);
		a[i][1].count+=a[i-1][1].count;
	}
	sum=0;
	for(i=1,j=1;i<=n1&&j<=n2;)
	{
		if(a[i][0].x==a[j][1].x)
		{
			if(a[i][0].count<a[j][1].count&&a[j-1][1].count<a[i][0].count)
			{
				if(a[j-1][1].count>a[i-1][0].count)
				{
					max=a[j-1][1].count;
				}
				else max=a[i-1][0].count;
				
				sum+=a[i][0].count-max;
				i++;
			}
			else if(a[i][0].count>=a[j][1].count&&a[j][1].count>a[i-1][0].count)
			{
				if(a[j-1][1].count>a[i-1][0].count)
				{
					max=a[j-1][1].count;
				}
				else max=a[i-1][0].count;
				
				sum+=a[j][1].count-max;
				j++;
			}
			else if(a[i][0].count<a[j][1].count)
			{
				i++;
			}
			else if(a[i][0].count>=a[j][1].count)
			{
				j++;
			}
		}
		else if(a[i][0].count<a[j][1].count)
		{
			i++;
		}
		else if(a[i][0].count>a[j][1].count) j++;
		else 
		{
			i++,j++;
		}
	}
	printf("%lld\n",sum);
}

 Problem - B - Codeforces

1.这一题说,只需要比较大小即可,如果它能拿的大,我们可以安排让他先拿完,保证永远比另外一个大

代码:

#include<stdio.h>
#define N 110
int a[N];
int main()
{
	int t,n,i,s1,s2;
	scanf("%d",&t);
	while(t--)
	{
		s1=s2=0;
		scanf("%d",&n);
		for(i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
			if(a[i]%2==0) s1+=a[i];
			else s2+=a[i];
		}
		if(s1>s2) puts("YES");
		else puts("NO");
	}
	return 0;
}

 Problem - C - Codeforces

1.这道题暴力枚举即可,我们去枚举每一个位置的后一个位置,以及后一个位置每次跳俩次,不相等即可,如果相等就一定是NO,否则是YES

代码:

#include<stdio.h>
int main()
{
	int t,i,j,n;
	char s[2010];
	scanf("%d",&t);
	while(t--)
	{
	    int	flag=1;
		scanf("%d",&n);
		scanf("%s",s);
		for(i=0;i<n&&flag;i++)
		{
			for(j=i+1;j<n;j+=2)
			{
				if(s[i]==s[j]) 
				{
					flag=0;
					break;
				}
			}
		}
		if(flag) puts("YES");
		else puts("NO");
	}
}

 Problem - D - Codeforces

1.利用前缀和思想,去求出所有的前面的总和,然后减去区间的值,最后加上k*(r-l+1)判断奇数偶数即可

代码:

#include<stdio.h>
#define N 200010
int a[N];
int b[N];
int main()
{
	int t,n,q,i,l,r,k;
	scanf("%d",&t);
	while(t--)
	{
	//	sum=0;
		b[0]=0;
		scanf("%d%d",&n,&q);
		for(i=1;i<=n;i++)
		{
			scanf("%d",&a[i]);
			b[i]=a[i]+b[i-1];
		}
		for(i=0;i<q;i++)
		{
			scanf("%d%d%d",&l,&r,&k);
		//	printf("%d\n",b[n]-(b[r]-b[l-1])+k*(r-l+1));
			if((b[n]-(b[r]-b[l-1])+k*(r-l+1))%2) puts("YES");
			else puts("NO");
		}
	}
	
	return 0;
}

 

我这俩天试着写了很多题,但是提交上去不是TLE就是WA。所以那些题在没有写出来之前就并没有写题解了。

java知识点

java的控制台输入由system.in()完成。

用BufferedReader对象创建后,我们使用read()方法去从控制台读取一个字符,或者用readLine()方法读取一个字符串.

scanner类用于输入

next()获取字符串类似于c语言里面的scanf(“%s”),而nextLine()获取字符串很像gets。

输入int或者float类型的数据,输入之前最好使用hasNextXxx方法进行验证,再使用nextXxx来获取。

输入int时nextInt,float是nextFloat

读写文件是俩个流

FileInputStream和FileOutputStream

读取:

InputStream f=new FileInputStream(“工作目录”)

或者

File f=new File(“”);

InputStream in =new FileInputStream(f)

写入:

OutputStream f = new FileOutputStream(“”)

或者

File f = new File(“”);

OutputStream fout=new FileOutputSTream(f)

一些操作:

close()

write(int w) throws IOExpception{}

指定的字节写到输出流中

write(byte[] w)

把指定数组中w数组的长度字节写到OutputStream中

集合

java中集合框架有主要包括俩种类型的容器,一个是集合类collection,存储元素集合,一个是图Map,存储对应键、值对映射。集合类对应list、Set、Queen、抽象类、具体类(ArrayList、LinkedList、HashSet……)

集合框架包含以下内容:

接口:指代表集合的抽象数据类型。

实现(类)是集合接口的具体实现

算法:实现集合接口的对象里面的方法执行的一些有用的计算

内部类

定义在其他类内部的类称为内部类,也叫嵌套类,包含内部类的类也被称为外部类。

内部类比外部类可以多使用三个修饰符,private、protected、static——外部类不可以使用这三个修饰符。

静态内部类

如果使用static修饰一个内部类,那么这个内部类属于外部类本身,而不属于外部类的某一个对象。使用static修饰的内部类被称为类内部类,也称为静态内部类。

接口里面定义的内部类默认使用public static修饰,接口内部类只能是静态内部类。

如果希望在外部类以外的地方访问内部类,内部类不能使用public访问控制权限,private修饰的内部类只能在外部类内部使用。

局部内部类

把内部类放在方法里面定义,就叫这个内部类为局部内部类,局部内部类仅仅在该方法里面有效。局部内部类不能使用访问控制符和static修饰符修饰。

匿名内部类

匿名内部类只适合创建只需要使用一次的类,匿名内部类不能重复使用。

定义格式如下:

new 实现接口() //或者父类构造器(实参列表)

{

                //匿名内部类的类体部分

}

匿名内部类必须继承一个父类或者实现一个接口,但是最多只能继承一个父类和一个接口。

匿名内部类不能是抽象类,系统创建匿名内部类时,会创建匿名内部类的对象。

匿名内部类不能定义构造器,因为匿名内部类没有类名,所以无法定义构造器。但是它可以定义初始化块。

Lambda表达式允许使用更简洁的代码来创建一个抽象方法的接口(这种接口被称为函数式接口)

Lambda表达式语法:

(参数) ->(表达式)

或者

(参数)->{ (表达式);}

可以不声明参数类型,系统会识别,一个参数可以不订阅圆括号,但是多个参数需要。如果只有一个语句则不需要大括号,如果只有一个表达式,那么系统会自动返回,如果不是需要自己指定返回。

如果Lambda表达式的代码块只有一条代码,可以在代码块种使用方法引用和构造器引用。

枚举类

java中枚举类关键字是enum。枚举类不能派生子类。默认是private修饰,也只能是private修饰。

定义:

修饰符 enum 名称

{

……

}

枚举类也可以定义成员变量、方法和构造器,也可以包含抽象方法。

枚举类也可以实现一个或者多个接口。如果枚举类实现接口类里面的方法,那么每个枚举值在调用该方法时都有相同的行为方式。

强制回收内存:system.gc();或者Runtime对象的gc()实例方法Runtime.getRuntime().gc()。

如果想让系统自动回收,使用finalize()方法

相关文章:

  • Python 基础教程【3】:字符串、列表、元组
  • C++ 手写一个WebServer
  • Cookie和Session详解
  • 计算机网络复习重点
  • 个人小站折腾后记
  • 基于YOLOv5的舰船检测与识别系统(Python+清新界面+数据集)
  • 网络安全的特性
  • GPT-4最震撼我的一点
  • 十大经典排序算法(上)
  • ChatGPT加强版GPT-4面世,打工人的方式将被颠覆
  • JavaEE简单示例——基于注解的AOP实现
  • 【个人首测】百度文心一言 VS ChatGPT GPT-4
  • 【视频文稿】车载Android应用开发与分析 - 开发系统应用
  • 用 ChatGPT 辅助学好机器学习
  • 百度文心一言对标 ChatGPT,你怎么看?
  • 百度终于要出手了?文心一言
  • ZYNQ硬件调试-------day2
  • 雪花算法(SnowFlake)
  • 用chatgpt写insar地质灾害的论文,重复率只有1.8%,chatgpt4.0写论文不是梦
  • 《ChatGPT是怎样炼成的》
  • https://app.hackthebox.com/machines/Inject
  • Spring —— Spring简单的读取和存储对象 Ⅱ
  • 渗透测试之冰蝎实战
  • Mybatis、TKMybatis对比
  • Microsoft Office 2019(2022年10月批量许可版)图文教程
  • 《谷粒商城基础篇》分布式基础环境搭建
  • 哈希表题目:砖墙
  • Vue 3.0 选项 生命周期钩子
  • 【车载嵌入式开发】AutoSar架构入门介绍篇
  • 【计算机视觉 | 目标检测】DETR风格的目标检测框架解读