CF#322-D. Three Logos-模拟水题

本文介绍了一种将三个矩形Logo放入最小正方形木板的算法。首先判断总面积是否为完全平方数,接着探讨两种布局方案:一是三个矩形水平堆叠;二是其中一个矩形位于顶部,其余两个在底部,并提供了具体的实现代码。

坑爹啊,    题目很简单要把三个矩形的logo塞进一个最小的正方形(是正方形)的木板里

直接把三个矩形面积加起来,如果不是一个平方数,直接no

x1 y1 表示矩形的长宽, 自己处理使得  y1>=x1

接下来只有2种情况了!

  一个是  三个矩形横着叠成三层 形如 “三”   条件是 y1==y2==y3==n 切 x1+x2+x3==n

另一个是 一个矩形在上面,两个在下面

 


这种情况 肯定就是  y1||y2||y3 有一个等于n

假设是y1==n

那么只需要满足  用logo2和logo3 看能否拼成 除了logo1占掉的部分了

也就是要求 

x2+x3==n &&y2==y3==n-x1

或者x2+y3==n&&   y2==x2==n-x1

或者x3+y2==n&& x2==x3==n-x1

或者x3=y3 &&y2==x3==n-x1

任一情况满足就可以了


无脑暴力一遍就可以了。。。然后最后代码 的if 之间手残加了个else。。。。过了pre test 死才systemtset。。。。去掉else ,ac


#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <map>
#include <set>
#include <vector>
using namespace std;

int min(int a,int b)
{
	return a<b?a:b;
}

int max(int a,int b)
{
	return a>b?a:b;
}
int n=-1;
int show(int a,int b,int c)
{
	int x1=a;
	int x2=b;
	int x3=c;
	int i,j;
	for (j=1;j<=x1;j++)
	{ 
		for (i=1;i<=n;i++)
			printf("A"); 
		printf("\n");
	}
	for (j=1;j<=x2;j++)
	{ 
		for (i=1;i<=n;i++)
			printf("B"); 
		printf("\n");
	}
	for (j=1;j<=x3;j++)
	{ 
		for (i=1;i<=n;i++)
			printf("C"); 
		printf("\n");
	}
	return 0;
}


int main()
{
	
	int i,j;
	int x1,x2,x3,y1,y2,y3;
	scanf("%d%d",&x1,&y1);
	scanf("%d%d",&x2,&y2);
	scanf("%d%d",&x3,&y3);
	if (x1>y1) 
		swap(x1,y1);
	if (x2>y2) 
		swap(x2,y2);
	if (x3>y3) 
		swap(x3,y3);
	
	
	int sum=x1*y1+x2*y2+x3*y3;
	
	
	for (i=2;i<=sqrt(double(sum));i++)
	{
		if (sum%i!=0)
			continue;
		else
		{
			if (i*i==sum)
			{
				n=i;
				break;
			}
		}
	} 
	int wi=n;
	if (n==-1)
	{
		printf("-1\n");
		return 0;
	}
	else
	{  
		if (y2==n&&y3==n&&y1==n)
		{
			if (x1+x2+x3==n)
			{
				printf("%d\n",n);
				show(x1,x2,x3);
				return 0;
			}
			else
			{
				printf("-1\n");
				return 0;
			}
			
		}
		
		int tmpmx=max(y1,max(y2,y3));
		if (tmpmx!=n)
		{
			printf("-1\n");
			return 0;
		}
		if (tmpmx==y1)
		{
			wi-=x1;
			if (x2+x3==n)
			{
				if (y2==wi&&y3==wi)
				{
					printf("%d\n",n);
					for (i=1;i<=x1;i++)
					{
						for (j=1;j<=n;j++)
							printf("A"); 
						printf("\n");
					}
					for (i=1;i<=wi;i++)
					{
						for (j=1;j<=n;j++)
						{
							if (j<=x2)
								printf("B");
							else
								printf("C");
						}
						printf("\n");
					}
					return 0;
					
					
				}
			}
			
				if (x2+y3==n)
				{
					if (y2==wi&&x3==wi)
					{
						printf("%d\n",n);
						for (i=1;i<=x1;i++)
						{
							for (j=1;j<=n;j++)
								printf("A"); 
							printf("\n");
						}
						for (i=1;i<=wi;i++)
						{
							for (j=1;j<=n;j++)
							{
								if (j<=x2)
									printf("B");
								else
									printf("C");
							}
							printf("\n");
						}
						return 0;
						
						
					}
				}
				
					if (y2+y3==n)
					{
						if (x2==wi&&x3==wi)
						{
							printf("%d\n",n);
							for (i=1;i<=x1;i++)
							{
								for (j=1;j<=n;j++)
									printf("A"); 
								printf("\n");
							}
							for (i=1;i<=wi;i++)
							{
								for (j=1;j<=n;j++)
								{
									if (j<=y2)
										printf("B");
									else
										printf("C");
								}
								printf("\n");
							}
							return 0;
							
							
						}
					}
					
						if (y2+x3==n)
						{
							if (x2==wi&&y3==wi)
							{
								printf("%d\n",n);
								for (i=1;i<=x1;i++)
								{
									for (j=1;j<=n;j++)
										printf("A"); 
									printf("\n");
								}
								for (i=1;i<=wi;i++)
								{
									for (j=1;j<=n;j++)
									{
										if (j<=y2)
											printf("B");
										else
											printf("C");
									}
									printf("\n");
								}
								return 0;
								
								
							}
						}
						
						
		}
		else
			if (tmpmx==y2)
			{
				wi-=x2;
				if (x1+x3==n)
				{
					if (y1==wi&&y3==wi)
					{
						printf("%d\n",n);
						for (i=1;i<=x2;i++)
						{
							for (j=1;j<=n;j++)
								printf("B"); 
							printf("\n");
						}
						for (i=1;i<=wi;i++)
						{
							for (j=1;j<=n;j++)
							{
								if (j<=x1)
									printf("A");
								else
									printf("C");
							}
							printf("\n");
						}
						
						return 0;
					}
				}
				
					if (y1+x3==n)
					{
						if (x1==wi&&y3==wi)
						{
							printf("%d\n",n);
							for (i=1;i<=x2;i++)
							{
								for (j=1;j<=n;j++)
									printf("B"); 
								printf("\n");
							}
							for (i=1;i<=wi;i++)
							{
								for (j=1;j<=n;j++)
								{
									if (j<=y1)
										printf("A");
									else
										printf("C");
								}
								printf("\n");
							}
							
							return 0;
						}
					}
				
						if (y1+y3==n)
						{
							if (x1==wi&&x3==wi)
							{
								printf("%d\n",n);
								for (i=1;i<=x2;i++)
								{
									for (j=1;j<=n;j++)
										printf("B"); 
									printf("\n");
								}
								for (i=1;i<=wi;i++)
								{
									for (j=1;j<=n;j++)
									{
										if (j<=y1)
											printf("A");
										else
											printf("C");
									}
									printf("\n");
								}
								
								return 0;
							}
						}	
					
							if (x1+y3==n)
							{
								if (y1==wi&&x3==wi)
								{
									printf("%d\n",n);
									for (i=1;i<=x2;i++)
									{
										for (j=1;j<=n;j++)
											printf("B"); 
										printf("\n");
									}
									for (i=1;i<=wi;i++)
									{
										for (j=1;j<=n;j++)
										{
											if (j<=x1)
												printf("A");
											else
												printf("C");
										}
										printf("\n");
									}
									
									return 0;
								}
							}
							
							
			}
			else
				if (tmpmx==y3)
				{
					wi-=x3;
					if (x2+x1==n)
					{
						if (y1==wi&&y2==wi)
						{
							printf("%d\n",n);
							for (i=1;i<=x3;i++)
							{
								for (j=1;j<=n;j++)
									printf("C"); 
								printf("\n");
							}
							for (i=1;i<=wi;i++)
							{
								for (j=1;j<=n;j++)
								{
									if (j<=x1)
										printf("A");
									else
										printf("B");
								}
								printf("\n");
							}
							return 0;
							
						}
					}
					
						if (x2+y1==n)
						{
							if (x1==wi&&y2==wi)
							{
								printf("%d\n",n);
								for (i=1;i<=x3;i++)
								{
									for (j=1;j<=n;j++)
										printf("C"); 
									printf("\n");
								}
								for (i=1;i<=wi;i++)
								{
									for (j=1;j<=n;j++)
									{
										if (j<=y1)
											printf("A");
										else
											printf("B");
									}
									printf("\n");
								}
								return 0;
								
							}
						}	
							if (y2+y1==n)
							{
								if (x1==wi&&x2==wi)
								{
									printf("%d\n",n);
									for (i=1;i<=x3;i++)
									{
										for (j=1;j<=n;j++)
											printf("C"); 
										printf("\n");
									}
									for (i=1;i<=wi;i++)
									{
										for (j=1;j<=n;j++)
										{
											if (j<=y1)
												printf("A");
											else
												printf("B");
										}
										printf("\n");
									}
									return 0;
									
								}
							}	
								if (y2+x1==n)
								{
									if (y1==wi&&x2==wi)
									{
										printf("%d\n",n);
										for (i=1;i<=x3;i++)
										{
											for (j=1;j<=n;j++)
												printf("C"); 
											printf("\n");
										}
										for (i=1;i<=wi;i++)
										{
											for (j=1;j<=n;j++)
											{
												if (j<=x1)
													printf("A");
												else
													printf("B");
											}
											printf("\n");
										}
										return 0;
										
									}
								}
								
								
				}
				printf("-1\n");
				return 0;
				
				
	}
	
	
	
	return 0;
	
}


<think>好的,我现在需要帮助用户解决在WSL2环境下部署ORT的问,并且用户已经准备好Java和Docker工具。首先,用户提到了ORT项目目录结构以及部署步骤,所以我的回答需要涵盖这两个方面。 先回想一下之前的对话历史。用户之前已经询问过如何部署ORT,我给出了详细的步骤,包括环境验证、部署策略、具体流程和常见问。现在用户的新问更具体,是关于项目目录结构和部署步骤的详细说明,特别是他们已经准备好Java和Docker的环境。 首先,我需要确定ORT指的是哪个项目。根据上下文,用户可能指的是ONNX Runtime(ORT),这是一个用于推理和训练机器学习模型的库。另一个可能是OR-Tools,但根据之前的回答,用户提到了ONNX Runtime的部署,所以这里应该继续以ONNX Runtime为例。 接下来,用户需要了解ORT的项目目录结构。我需要回忆ONNX Runtime的标准目录结构。通常,一个典型的ORT项目可能包括模型目录、源代码目录、依赖库、配置文件、构建脚本、文档和测试目录等。比如,模型文件存放在models文件夹,Java代码放在src/main/java里,依赖的JAR包放在lib目录,Docker相关的文件在docker目录下,还有配置文件如config,构建工具如Maven或Gradle的配置,文档在docs,测试代码在test等。 然后是关于部署步骤。用户的环境已经准备好,所以不需要再安装Java或Docker,但可能需要确认版本是否合适。部署步骤可能包括克隆项目仓库(如果有的话)、配置环境变量、构建项目、运行测试、Docker镜像的构建和运行,以及验证部署是否成功。 需要注意用户是在WSL2环境下,所以路径和权限可能与普通Linux环境有所不同。比如,WSL2的文件系统访问可能需要特别注意,尤其是当项目文件存放在Windows挂载的目录时,可能会有性能问或权限问,因此建议将项目放在WSL2的原生文件系统中。 另外,用户可能对如何集成Java和Docker有疑问,比如如何在Docker容器中运行Java应用,如何挂载卷,如何设置端口映射等。需要提供具体的命令示例,比如docker build和docker run的命令,以及如何将Java应用打包成JAR并运行在容器中。 还需要考虑常见问,比如依赖项缺失、端口冲突、GPU加速配置(如果用户有NVIDIA显卡并需要GPU支持),以及如何在WSL2中启用GPU加速,这可能涉及到安装特定的驱动和配置Docker使用GPU。 在整理回答时,应该分步骤进行,结构清晰,先目录结构,再部署步骤,每个步骤给出具体的命令和说明。同时,结合用户之前的问,确保引用之前的建议,比如环境变量的设置、Docker组的用户权限等,避免重复但保持连贯。 最后,用户可能需要进一步的问,比如如何调试,如何优化性能,如何处理特定的错误信息,所以相关问部分需要涵盖这些潜在的问点,帮助用户进一步探索解决方案。</think>### ORT项目目录结构与WSL2部署指南(Java+Docker环境) --- #### 一、ORT标准项目目录结构(以ONNX Runtime为例) ```bash ORT_Project/ ├── models/ # 模型存储目录(核心部署资产) │ ├── your_model.onnx # ONNX格式模型文件 │ └── config.json # 模型配置文件 ├── src/ │ └── main/ │ ├── java/ # Java源代码目录 │ │ └── com/ │ │ └── example/ │ │ ├── OrtLoader.java # 模型加载类 │ │ └── InferenceDemo.java # 推理示例 │ └── resources/ # 配置文件目录 ├── lib/ # 依赖库目录(关键组件) │ └── onnxruntime-1.15.0-linux-x64.jar # Linux专用JAR ├── docker/ # Docker部署配置 │ ├── Dockerfile # 镜像构建文件 │ └── docker-compose.yml # 服务编排配置 ├── scripts/ # 部署脚本 │ ├── build_model.sh # 模型转换脚本 │ └── start_service.sh # 服务启动脚本 ├── docs/ # 文档目录 │ └── deployment_guide.md # 部署指南 └── test/ # 测试目录 └── InferenceTest.java # 单元测试用例 ``` --- #### 二、分步部署流程(基于WSL2环境) ##### 1. **初始化工作区** ```bash # 创建标准项目目录(注意WSL2推荐使用Linux原生文件系统) mkdir -p ~/ort_project/{models,src/main/java,lib,docker,scripts,test} cd ~/ort_project # 下载ORT Java SDK(Linux版本) wget -P lib/ https://repo1.maven.org/maven2/com/microsoft/onnxruntime/onnxruntime/1.15.0/onnxruntime-1.15.0-linux-x64.jar ``` ##### 2. **编写Java示例代码** ```java // src/main/java/com/example/OrtLoader.java package com.example; import ai.onnxruntime.*; public class OrtLoader { public static void main(String[] args) throws OrtException { try (OrtEnvironment env = OrtEnvironment.getEnvironment()) { System.out.println("[Success] ORT Version: " + env.getVersion()); // 加载模型(需将模型文件放在models目录) String modelPath = "models/your_model.onnx"; try (OrtSession session = env.createSession(modelPath, new OrtSession.SessionOptions())) { System.out.println("[Loaded] Model inputs: " + session.getInputInfo().keySet()); } } } } ``` ##### 3. **编译与本地测试** ```bash # 编译Java代码(注意Linux文件路径) javac -cp "lib/*" src/main/java/com/example/OrtLoader.java -d target/ # 运行测试(确保模型文件已放置) java -cp "target:lib/*" com.example.OrtLoader # 预期输出:[Success] ORT Version: 1.15.0 ``` ##### 4. **Docker化部署** ```dockerfile # docker/Dockerfile FROM openjdk:17-jdk-slim WORKDIR /app COPY lib/onnxruntime-*.jar /app/lib/ COPY models /app/models COPY target /app/target CMD ["java", "-cp", "target:lib/*", "com.example.OrtLoader"] ``` ```bash # 构建Docker镜像(注意WSL2的Docker引擎状态) docker build -f docker/Dockerfile -t ort-java-demo . # 运行容器(挂载模型目录) docker run -it --rm \ -v $(pwd)/models:/app/models \ ort-java-demo ``` ##### 5. **生产级部署优化** ```yaml # docker/docker-compose.yml version: '3.8' services: ort-service: image: ort-java-demo:latest volumes: - ./models:/app/models:ro # 只读挂载保证模型安全 ports: - "9000:8080" # 暴露HTTP端口 environment: - ORT_LOG_LEVEL=INFO ``` --- #### 三、关键路径说明 | 路径 | 作用 | WSL2注意事项 | |------------------------|-------------------------------|----------------------------------| | `models/` | 存储所有ONNX模型 | 避免放在`/mnt/c/`等Windows挂载路径[^1] | | `lib/` | 存放Linux版ORT JAR包 | 必须使用`linux-x64`后缀版本 | | `docker/Dockerfile` | 定义Java运行环境 | 基础镜像建议使用`slim`版本减少体积 | | `scripts/start_service.sh` | 快速启动脚本 | 需添加执行权限:`chmod +x scripts/*.sh` | --- #### 四、验证部署成功的标志 1. **基础验证** ```bash # 检查容器运行状态 docker ps --filter "name=ort-service" --format "table {{.ID}}\t{{.Status}}" # 查看日志输出 docker logs ort-service | grep -E 'ORT Version|Model inputs' ``` 2. **性能验证** ```bash # 压力测试(使用Apache Bench) docker run --network host httpd:2.4 ab -n 100 http://localhost:9000/inference ``` --- ### 相关问 1. **如何调试ORT的JNI加载问?** 添加JVM参数:`-Djava.library.path=/path/to/onnxruntime_jni.so` 或使用`ldd`检查依赖:`ldd libonnxruntime.so.1.15.0`[^2] 2. **WSL2中如何提升Docker容器性能?** 修改`.wslconfig`文件: ```ini [wsl2] memory=8GB processors=4 localhostForwarding=true ``` 3. **如何更新ORT Java SDK版本?** 修改`lib/`目录下的JAR包,同步更新`pom.xml`中的依赖版本号 4. **模型热加载如何实现?** 使用文件监听机制: ```java WatchService watcher = FileSystems.getDefault().newWatchService(); Paths.get("models").register(watcher, ENTRY_MODIFY); ``` [^1]: WSL2挂载Windows目录会导致IO性能下降,建议使用`~/`路径存储项目文件 [^2]: JNI问常见于架构不匹配,确认下载的JAR包包含`linux-x64`标识 [^3]: GPU加速需在Windows安装NVIDIA驱动并配置WSL2 CUDA支持
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值