首页 > 其他分享 >1.19

1.19

时间:2025-01-19 16:31:47浏览次数:1  
标签:cnt int up dfs 1.19 down static

FBI树

[P1087 NOIP2004 普及组] FBI 树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

  • 不用去建树,直接不断拆分递归,然后每次判断一下这个区间内有多少个1,0.
  • 感觉类似二分
import java.util.Scanner;

public class Main {
    static int n;
    static String s;
    public static void dfs(int up, int down) {
    	if(up != down) {
    		int mid = (up + down) / 2;
    		dfs(up, mid);
    		dfs(mid + 1, down);
    	}
    	
    	int num_1 = 0;
    	int num_0 = 0;
    	for(int i = up; i <= down; i++) {
    		if(s.charAt(i) == '1') {
    			num_1++;
    		} else {
    			num_0++;
    		}
    	}
    	
    	if(num_1 != 0 && num_0 != 0) {
    		System.out.print("F");
    	}else if(num_1 != 0){
    		System.out.print("I");
    	}else {
    		System.out.print("B");
    	}
    }
    
    public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
    	n = scanner.nextInt();
    	s = scanner.next();
    	s = " " + s;
    	dfs(1, s.length() - 1);
    	
    	return;
	}
}
#include<iostream>
#include<string>
using namespace std;

int n;
string s;

void dfs(int up, int down) {
	if(up != down) {
		int mid = (up + down) / 2;
		dfs(up, mid);
		dfs(mid + 1, down);
	}
	
	int num_1 = 0;
	int num_0 = 0;
	for(int i = up; i <= down; i++) {
		if(s[i] == '1') {
			num_1++;
		} else {
			num_0++;
		}
	}
	
	if(num_1 && num_0) {
		cout<<"F";
	}else if(num_1){
		cout<<"I";
	}else {
		cout<<"B";
	}
	
	 
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	
	cin>>n>>s;
	
	s = " " + s;
	dfs(1, s.size() - 1);
	
	return 0;
}

01迷宫

P1141 01迷宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

  • 本题一开始用的dfs来了一发,但是发现有几个点会爆TLE,考虑优化方案。
  • 考虑到就是,如果我能从一个块走到另一个块,那么我必然可以走回去。
  • 即其实就是一个染色连通块,只要已经染过色,就已经产生了答案,也就是不必再去搜索。
  • 那之后就比较简单了,我们只需要把走过的点标记然后下次遇到走过的点不搜就是了
  • 至于染色块答案存储,选用的时map
#include<iostream>
#include<cstring>
#include<map>
using namespace std;

const int N = 1e3 + 10;
int g[N][N]; 
bool str[N][N];
int cnt[N][N];
int cnt_bankuai;
int n, m;
int ans;
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
map<int,int>myMap;

void dfs(int x, int y) {
	for(int i = 0; i < 4; i++) {
		int nowx = dx[i] + x;
		int nowy = dy[i] + y;
		if(nowx >= 1 && nowx <= n && nowy >= 1 && nowy <= n) {
			if(!str[nowx][nowy] && g[nowx][nowy] == !g[x][y]) {
				str[nowx][nowy] = true;
				cnt[nowx][nowy] = cnt_bankuai;
				myMap[cnt_bankuai]++;
				ans++;
				dfs(nowx, nowy);
			}
		}
		
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	
	cin>>n>>m;
	
	for(int i = 1; i <= n; i++) {
		string s;
		cin>>s;
		for(int j = 1;j <= n; j++) {
			g[i][j] = s[j - 1] - '0';
		}
	}
	
	while(m--) {
		//memset(str, false, sizeof(str));
		ans = 1;
		int x, y;
		cin>>x>>y;

		if(!str[x][y]) {
			cnt_bankuai++;
			myMap[cnt_bankuai]++;
			cnt[x][y] = cnt_bankuai;
			str[x][y] = true;
			dfs(x, y);
		}else{
			int num = cnt[x][y];
			ans = myMap[num];
		}
		

		cout<<ans<<endl;
	}
	
	return 0;
}

package shuati;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
	
	static final int N = 1010;
	static int[][] g = new int[N][N];
	static boolean[][] str = new boolean[N][N];
	static int[][]cnt = new int[N][N];
	static int dx[] = {1, 0, -1, 0};
	static int dy[] = {0, 1, 0, -1};
    static int n, m, ans, cnt_bankuai;
    static Map<Integer, Integer>myMap = new HashMap<Integer, Integer>();
    
    public static void dfs(int x, int y) {
    	for(int i = 0; i < 4; i++) {
    		int nowx = dx[i] + x;
    		int nowy = dy[i] + y;
    		if(nowx >= 1 && nowx <= n && nowy >= 1 && nowy <= n) {
    			if(!str[nowx][nowy] && ((g[nowx][nowy] == g[x][y] + 1) ||( g[nowx][nowy] == g[x][y] - 1))) {
    				str[nowx][nowy] = true;
    				cnt[nowx][nowy] = cnt_bankuai;
    				myMap.put(cnt_bankuai, myMap.get(cnt_bankuai) + 1);
    				ans++;
    				dfs(nowx, nowy);
    			}
    		}
    		
    	}
    }
    
    public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
    	n = scanner.nextInt();
    	m = scanner.nextInt();
    	
    	for(int i = 1; i <= n; i++) {
    		String s;
    		s = scanner.next();
    		for(int j = 1;j <= n; j++) {
    			g[i][j] = s.charAt(j - 1) - '0';
    		}
    	}
    	
    	while(m-- != 0) {
    		ans = 1;
    		int x, y;
    		x = scanner.nextInt();
    		y = scanner.nextInt();

    		if(!str[x][y]) {
    			cnt_bankuai++;
    			myMap.put(cnt_bankuai, 1);
    			cnt[x][y] = cnt_bankuai;
    			str[x][y] = true;
    			dfs(x, y);
    		}else{
    			int num = cnt[x][y];
    			ans = myMap.get(num);
    		}
    		

    		System.out.println(ans);
    	}
    	
    	return;
	}
}

  • java的这个代码会爆栈溢出,不知道怎么调了
  • 今晚还有场div3,✌

标签:cnt,int,up,dfs,1.19,down,static
From: https://www.cnblogs.com/Mikkeykarl/p/18679679

相关文章

  • [2025.1.19 JavaSE学习]网络编程-2(netstat指令 && TCP补充)
    netstatnetstat-an:可以查看当前主机网络情况,包括端口监听情况和网络连接情况netstat-an|more:可以分页显示在dos控制台执行Listening表示某个端口在监听如果有一个外部程序(客户端)连接到该端口,就会显示一条连接信息PS:netstat-anb,可以发现,8888端口号在上一节程序运行......
  • 1.19 CW 赛时记录
    前言听不懂了,看到故人了看题\(\rm{T1}\)串串像\(\rm{dp}\),做一下才知道\(\rm{T2}\)构构造造困难\(\rm{T3}\)听不懂了\(\rm{T4}\)看不懂了应该很困难放平心态多打部分分时间管控好,然后就是做题\(\rm{T1}\)能不能给一个好一点的样例?思路首先转化题意......
  • 24.11.19 定时任务
    定时任务1、什么是定时任务? 闹钟/每天定时7点半8点 在固定的时间做什么事情2、定时任务作用 国定时间同步时间 数据备份(备份的服务器)重要的数据备份3份公司备份服务器笔记本移动硬盘网盘一份 先打包然后再备份(代码文件上百个上千个)占用磁盘io降低传输速度iin......
  • 11.19
    软件设计                 石家庄铁道大学信息学院 实验18:迭代器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解迭代器模式的动机,掌握该模式的结构;2、能够利用迭代器模式解决实际问题。 [实验任务一]:JAVA和C++常见数据结构迭代器......
  • 11.19
    优化思想 1. 必须测量性能人的感觉对于检测性能提高了多少来说是不够精确的。人的记忆力不足以准确地回忆起以往多次实验的结果。本内侧的知识可能会误导你,使你相信了一些并非总是正确的事情。当判断是否应当对某段代码进行优化的时候,开发人员的直觉往往差得令人吃惊。他们......
  • 2024.11.19 第一次讲座
    讲座的课后反思:提升数字素养今天听了来自青浦区的教研员张杨旭老师的讲座,收获和思考颇丰。张老师分享了在数字时代和人工智能背景下,教育者应具备的数字素养,以及如何利用这些技术改进教学方法。通过四个案例,分别展示了历史、思政、探究和信息四门课程的数字化应用,强调了个性化教......
  • 11.19[JAVA-WEB]打通JAVA前后端-JSP
    JAVA网页开发(涉及服务器)结构是什么?代码逻辑是怎样的?JAVA网页开发(涉及服务器)结构是什么?代码逻辑是怎样的?(不使用spring框架)HTML、CSS和JavaScript运行在浏览器中,称为前端脚本服务器端脚本是运行在服务器上,动态生成网页(HTML、CSS和JavaScript)的程序。常见服务器端脚本......
  • C语言编程1.19男生女生
    题目描述给定一个班每个同学的性别,分别输出男女比例,男生学号和女生学号。输入格式第一行一个整数n,0<n≤500表示班级人数。第二行中有n个0(女生)或者1(男生),表示按学号(从1号开始)顺序的每个同学性别。输出格式第一行输出男生与女生的比例,形式为1:?。如果男女生相等,则输出1:1;如果......
  • 11.19
    创建表CAEATETABLE表名(字段名1数据类型1,字段名2数据类型2);删除表DROPTABLE表名修改表ALTERTABLE表名RENAMETO新的表名ALTERTABLE表名ADD列名数据类型ALTERTABLE表名MODIFY列名新数据类型DML给指定的列添加数据INSERTINTO表名(列名1,列名2,)VALUE......
  • 1.19 工业互联网融合应用六大类典型应用模式
    今天讲解了系统集成项目管理工程师教程视频课程(第3版)所涉及的工业互联网融合应用六大类典型应用模式相关的考试知识点,想通过考试的朋友可以点击链接,看完整版。......