首页 > 其他分享 >AT_abc182_e [ABC182E] Akari题解

AT_abc182_e [ABC182E] Akari题解

时间:2023-08-17 22:56:27浏览次数:36  
标签:false int 题解 灯泡 -- flag abc182 ABC182E cv

题目链接

思路

说实话,这道题其实算模拟,还是挺简单的那种。我们可以定一个 int 类型的二维数组,表示网格。通过不同的数字来表示该方格内不同的类型。然后,使用枚举法模拟网格内灯泡从上、下、左、右四个方向模拟光线的运动过程,在过程中增加可被照射到的格子数量,最后输出即可。


坑点:

  • 灯泡所在的方格也会有光照。
  • 被光照照到且没有障碍物的方格有多少。

参考代码(请勿抄袭):

#include<bits/stdc++.h>
using namespace std;
int cv[1510][1510],h,w,n,m; //对于cv数组内的每一个数,如果值为0,则代表当前是没有照的空地,如果是1,代表是被照的空地,如果是2,代表灯泡,如果是3,代表是障碍物。
bool flag=false;
long long outp=0;

int main(){
	memset(cv,0,sizeof(cv));//假设全是空地
	scanf("%d%d%d%d",&h,&w,&n,&m);//输入
	outp+=n;//灯泡也算 
	for(int i=1;i<=n;i++){//灯泡 
		int xi,yi;
		scanf("%d%d",&xi,&yi);
		cv[xi][yi]=2;
	}
	for(int i=1;i<=m;i++){//障碍 
		int xi,yi;
		scanf("%d%d",&xi,&yi);
		cv[xi][yi]=3;
	}
	for(int i=1;i<=h;i++){//往右走 
		flag=false;//初始化·不能继续
		for(int j=1;j<=w;j++){
			if(cv[i][j]==2) flag=true;//可以继续(有灯泡)	
			else if(cv[i][j]==3) flag=false;//不可以继续(遇到障碍物)
			if(flag==true&&cv[i][j]==0){//可以照并且未被照 
				cv[i][j]=1;
				outp++;
			}
		} 
	}
	for(int i=1;i<=h;i++){//往左走 
		flag=false;//初始化·不能继续
		for(int j=w;j>=1;j--){
			if(cv[i][j]==2) flag=true;//可以继续(有灯泡)	
			else if(cv[i][j]==3) flag=false;//不可以继续(遇到障碍物)
			if(flag==true&&cv[i][j]==0){//可以照并且未被照 
				cv[i][j]=1;
				outp++;
			}
		} 
	}
	for(int j=w;j>=1;j--){//往上走 
		flag=false;//初始化·不能继续
		for(int i=h;i>=1;i--){
			if(cv[i][j]==2) flag=true;//可以继续(有灯泡)	
			else if(cv[i][j]==3) flag=false;//不可以继续(遇到障碍物)
			if(flag==true&&cv[i][j]==0){//可以照并且未被照 
				cv[i][j]=1;
				outp++;
			}
		} 
	}
	for(int i=w;i>=1;i--){//往下走 
		flag=false;//初始化·不能继续
		for(int j=1;j<=h;j++){
			if(cv[j][i]==2) flag=true;//可以继续(有灯泡)	
			else if(cv[j][i]==3) flag=false;//不可以继续(遇到障碍物)
			if(flag==true&&cv[j][i]==0){//可以照并且未被照 
				cv[j][i]=1;
				outp++;
			}
		} 
	}
	printf("%d",outp);//输出结果
	return 0;
}

标签:false,int,题解,灯泡,--,flag,abc182,ABC182E,cv
From: https://www.cnblogs.com/CodeFishHp/p/17639119.html

相关文章

  • SP1837 PIE - Pie 题解
    题目链接思路一道简单二分答案题。对于每个确定的派的体积,设置左边界\(l\)、右边界\(r\)和尝试值\(mid\),用\(\operatorname{check}\)函数返回在每份有\(mid\)那么多派的情况下,可以分成几份。将这些结果加起来,与应分人数进行比较,如果份数小于人数,证明每一份分的太多了,将......
  • CF1762D GCD Queries 题解
    题面给定一个长度为\(n\)的排列\(0,1,\cdots,n-1\)。可以进行最多\(2n\)次询问,每次询问给出两个下标\(i,j\),交互器会返回\(\gcd(p_i,p_j)\)。询问以后,需要输出两个下标\(x,y\),满足\(p_x=0\lorp_y=0\)。特别地,\(\gcd(0,x)=x\)。题解观察次数限制,我们......
  • 题解 石头剪刀布
    plaesekillme.&&don'tforgetme.题目描述给定\(n\)个字符串\(s_i\)只包含0,1,2,现在要捏一个序列\(A\),\(s_i\)表示\(a_i\)可以捏成什么。1,2,3形成环形吊打关系,\(\omega(X)\)表示序列\(X\)最长的吊打子序列,吊打序列指的是对于\(a_{p_1},\dots,a_{p_k}\),除了......
  • CF1787E The Harmonization of XOR 题解
    CF1787ETheHarmonizationofXOR题目大意给定\(n\)个数\([1,2,3,\cdots,n]\)和两个正整数\(k\)和\(x\)。将这些数分成恰好\(k\)组使得每组的异或和都是\(x\)。(\(1\lek\len\le2\cdot10^5,1\lex\le10^9\))。题解首先,我们知道,如果我们无法从\(n\)......
  • CF1787E The Harmonization of XOR 题解
    题面将集合\(\left\{1,2,\cdots,n\right\}\)划分为\(k\)个非空不交子集,使得每个子集的异或和均为\(x\)。(\(1\len,k\le2\times10^5\))。题解首先显而易见的判断一下无解的情况,记\(sum=\bigoplus\limits_{i=1}^{n}i\),如果\(k\)为奇数但\(sum\neqx\)或......
  • CF803C Maximal GCD 题解
    题意构造一个长度为\(k\),和为\(n\)的严格单调递增序列,并最大化其最大公约数。(\(1\len,k\le10^{10}\))题解首先可以发现一个事实,这个序列的最大公约数一定为\(n\)的因子。所以我们可以考虑枚举\(n\)的所有因子并判断其能否成为整个序列的最大公约数。假设我们现在枚......
  • 【题解】#373. 「USACO1.1」Friday the Thirteenth 题解(2023-07-19更新)
    #373.「USACO1.1」FridaytheThirteenth题解本文章的访问次数为次。Part1提示题目传送门欢迎大家指出错误并私信这个蒟蒻欢迎大家在下方评论区写出自己的疑问(记得@这个蒟蒻)Part2背景这个蒟蒻又一次写了一篇大水题的题解(话说为什么是又),当然也是为了纪念他的\(......
  • 【题解】#68. 「NOIP2004」津津的储蓄计划 题解(2023-07-19更新)
    #68.「NOIP2004」津津的储蓄计划题解本文章的访问次数为次。Part1提示题目传送门欢迎大家指出错误并私信这个蒟蒻欢迎大家在下方评论区写出自己的疑问(记得@这个蒟蒻)Part2背景这是这个蒟蒻的第一篇题解,也是这个蒟蒻对自己的\(50\)AC的纪念。Part3更新日志......
  • 算法题解之罗马数字智力游戏
    题目描述牛牛和朋友在玩耍时发现了一款关于罗马数字的智力游戏。在这个游戏中,他们首先需要将一个给定的整数num转换为对应的罗马数字。但是,他们发现,当他们每次转换后的结果字符串长度达到了一个阈值limit时,他们需要将字符串反转。请编写一个函数,将给定的整数num转换为对应的......
  • [JOISC 2014 Day3] 电压 题解
    题面给定\(n\)个点\(m\)条边的无向图。现在要对每个点黑白染色。若能够使一条边连接的两点颜色相同,其他边连接的两点颜色不同,则这条边合法。求合法的边数。$2\leqn\leq10^5,1\leqm\leq2\times10^5$。图可能不连通,不保证没有重边。题解首先考虑转化一下题目......