首页 > 其他分享 >暑期竞赛培训 Day 16 <继续写题解>

暑期竞赛培训 Day 16 <继续写题解>

时间:2023-08-04 19:36:19浏览次数:31  
标签:cnt 16 int ans 样例 暑期 dx dy Day

- [1] [蓝桥杯 2013 省 A] 剪格子 洛谷P8601

题目描述

如图 \(1\) 所示,\(3\times 3\) 的格子中填写了一些整数。

我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是 \(60\)。

本题的要求就是请你编程判定:对给定的 \(m\times n\) 的格子中的整数,是否可以分割为两个部分,使得这两个区域的数字和相等。

如果存在多种解答,请输出包含左上角格子的那个区域包含的格子的最小数目。

如果无法分割,则输出 \(0\)。

输入格式

程序先读入两个整数 \(m\),\(n\) 用空格分割 \((m,n<10)\)
表示表格的宽度和高度。

接下来是 \(n\) 行,每行 \(m\) 个正整数,用空格分开。每个整数不大于 \(10000\)。

输出格式

程序输出:在所有解中,包含左上角的分割区可能包含的最小的格子数目。

样例 #1

样例输入 #1

3 3
10 1 52
20 30 1
1 2 3

样例输出 #1

3

样例 #2

样例输入 #2

4 3
1 1 1 1
1 30 80 2
1 1 1 100

样例输出 #2

10

提示

第二个用例中:

时限 5 秒, 64M。蓝桥杯 2013 年第四届省赛

- [2] 题目分析:

First,既然分成两部分后使得两部分的和相等,那么存在两种特判情况,第一种是当所有的数加起来等于一个奇数时,肯定不满足题意,直接输出 0 ;

还有一种情况是当所有数中的最大数大于所有数和的一半时,例如一个 3 × 3 的矩阵:

1 1 1
10 1 1
1 1 1

矩阵当中的最大数是 10,而其余数加起来也才 8,显然不满足题意,So,还是输出 0 就行了。

Second,特判这两种情况后,开始搜索,我们从 a[1][1] 开始搜索,每次找上下左右四个方向最大的数,用 ans 来记录已经遍历过的数的和,再用一个 vis 数组记录当前位置已经走过,不能回头,然后当这个 ans 加 a[x][y] 超过了总和的一半时,说明不能往这边走,并且当 vis[x][y] 等于 1 时说明这里走过,不能走了。每走到一个点,用 cnt 记录走过点的数量,当 ans 等于总和的一半时,说明已经找到答案了,这时输出 cnt 的数量也就是遍历的最小的点的数量。

- [3] 代码实现:

#include<bits/stdc++.h>
using namespace std;
int a[15][15];	
int n,m,res=0,cnt=0,ans=0,mx=0;
int dx[4]={1,-1,0,0};//方向数组
int dy[4]={0,0,1,-1};//方向数组
bool vis[15][15];// vis数组判断该点是否走过;
void dfs(int x,int y){
	vis[x][y]=1;
	cnt++;
	ans+=a[x][y];	
	int maxn=0,maxi=0;	
	if(ans==res/2){//循环结束,输出cnt
		printf("%d",cnt);
		return ;
	} 
	for(int i=0;i<4;i++){	
		if(x+dx[i]<1 || y+dy[i]<1 || x+dx[i]>n || y+dy[i]>m || vis[x+dx[i]][y+dy[i]]==1 || ans+a[x+dx[i]][y+dy[i]] > res/2) continue;
		if(a[x+dx[i]][y+dy[i]]>maxn){
			maxi=i;
			maxn=a[x+dx[i]][y+dy[i]];//找最大的点进行遍历 和贪心思想差不多
		}
	}		
	if(x+dx[maxi]>0 && y+dy[maxi]>0 && x+dx[maxi]<=n && y+dy[maxi]<=m && vis[x+dx[maxi]][y+dy[maxi]]==0 && ans+a[x+dx[maxi]][y+dy[maxi]] <= res/2){//超出边界或已经找过或超过总和一半时退出
		dfs(x+dx[maxi],y+dy[maxi]);			
	}
}
int main(){
	scanf("%d%d",&m,&n);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			scanf("%d",&a[i][j]);
			res+=a[i][j];
            mx=max(mx,a[i][j]);
	}
	if(res%2!=0||mx>res/2){//特判两种情况
		printf("0\n");
		return 0;
	}
	dfs(1,1);//从左上角一开始遍历
	return 0;
}

But,这一题有一个恶心的hack数据,会使深搜过不了,我也没办法,没事,反正其他点过了QWQ

故事到这就结束了,有缘再见(深情~~~)QWQ

标签:cnt,16,int,ans,样例,暑期,dx,dy,Day
From: https://www.cnblogs.com/Wanghaoran-20080414/p/17606811.html

相关文章

  • MS5182N/MS5189N——16bit、4/8 通道、200KSPS、 SAR 型 ADC
    产品简述MS5182N/MS5189N是4/8通道、16bit、电荷再分配逐次逼近型模数转换器。采用单电源供电。MS5182N/MS5189N内部集成无失码的16位SARADC、低串扰多路复用器、内部低漂移基准电压源(可以选择2.5或4.096V)、温度传感器、可选择的单极点滤波器以及当多通道依次......
  • 嵌入式面试刷题(day3)
    (文章目录)前言本篇文章我们继续讲解嵌入式面试刷题,给大家继续分享嵌入式中的面试笔试经验和技巧。一、怎么判断两个float是否相同在C语言中,可以使用以下代码来比较两个float类型的数据是否相同:#include<stdio.h>#include<math.h>intmain(){floata=1.234;......
  • 安全学习之路Day39
    ......
  • day121 - 依赖注入的几种方式(2)
    依赖注入的几种方式为数组类型属性赋值直接配置property中的array属性<beanid="studentFive"class="com.gu.spring.pojo.Student"><propertyname="sid"value="1003"></property><propertyname="sname"value......
  • 非root用户解决Rstudo安装R包时报错 libpng16.so.16: cannot open shared object file
    在安装好几个R包的时候都出现了这个报错,看网上的解决方法都是root用户才能干的,我只是普通用户没法办,本来想忍忍就过去了,可是今天装个Deseq2都装不起来,并报错:libpng-config:commandnotfoundread.c:3:17:fatalerror:png.h:Nosuchfileordirectory所以我下定决心一定要......
  • P4169 题解
    题意二维平面上有\(n\)个点,给你\(m\)次操作,每次操作可以插入一个点或者询问所有点中距离给定点最近的哈密顿距离。\(n,m\le3\times10^5.\)分析这是一道K-DTree的裸题。而对于这道题,我们还需要考虑插入操作。我们给出两种方式:按很多题解的思路,在这棵树上直接按普通......
  • k8s部署DataEase1.16.0cluster模式
    1.下载官方helm  chart包下载地址:https://github.com/mfanoffice/dataease-helm/releases,当前最新为1.16.0#下载并解压helmchart包wgethttps://github.com/mfanoffice/dataease-helm/releases/download/1.16.0/dataease-1.16.0.tgztarxfdataease-1.16.0.tgzcddataease......
  • 2014年工作中遇到的20个问题:141-160
    141.日期转换。//输入的时间为毫秒的准确时间//firstTime:1417139867916,lastTime:1419731867916publicstaticintgetDayBetweenTwoDate(longfirstTime,longlastTime){//当天的0点:1417104000000} 问题原因:firstCalendaStartTime-lastCalendaStartTime......
  • ActiveMQ任意文件写入漏洞(CVE-2016-3088)
    ActiveMQ任意文件写入漏洞(CVE-2016-3088)【现实项目遇到过】1.环境搭建cdvulhub-master/activemq/CVE-2016-3088docker-composeup-ddocker-composeconfig#查看靶场环境相关的配置信息docker-composedown#关闭靶场环境环境监听61616端口和8161端口,其中8......
  • 第三阶段C++提高编程(黑马程序员)——Day10
    4STL-函数对象4.1函数对象4.1.1函数对象概念概念:重载函数调用操作符的类,其对象常称为函数对象函数对象使用重载的()时,行为类似函数调用,也叫仿函数本质:函数对象(仿函数)是一个类,不是一个函数4.1.2函数对象使用特点:函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值函数......