河工oj第七周补题题解2024

A.GO LecturesⅠ------ Victory

GO LecturesⅠ------ Victory - 问题 - 软件学院OJ

代码

统计

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

double b, w;

int main() {
	
	for(int i = 1; i <= 19; i ++) {
		for(int j = 1; j <= 19; j ++) {
			char ch; cin >> ch;
			if(ch == 'B') b ++;
			else w ++;
		}
	}
	if(b-7.5>w) puts("Black");
	else puts("White");
	return 0;
}

B.GO LecturesⅡ------ Liberty

GO LecturesⅡ------ Liberty - 问题 - 软件学院OJ

代码

在所给的位置上就地搜索。dfs搜索四个方向。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

const int N = 50;
char g[N][N];
int vis[N][N];
int n;
int ans;
int dx[4] = {0,-1,0,1},dy[4] = {-1,0,1,0};

void dfs(int x, int y) {
	vis[x][y] = 1;
	
	for(int i = 0; i < 4; i ++) {
		int a = x+dx[i], b = y+dy[i];
		if(a<0||b<0||b>=n||a>=n) continue;
		if(!vis[a][b] && g[a][b]=='*') {
			ans ++, vis[a][b] = 1;
		}
		else if(!vis[a][b] && g[a][b] == g[x][y]) {
			dfs(a,b);
		}
	}
}

int main() {
	cin >> n;
	for(int i = 0; i < n; i ++) {
		for(int j = 0; j < n; j ++) {
			cin >> g[i][j];
		}
	}
	
	int x, y;
	cin >> x >> y;//下标从1开始的,偏移一下,我这从0开始输入 
	dfs(x-1,y-1);
	
	cout << ans << endl;
	return 0;
}

C.GO Lectures Ⅲ------ Gambling

代码

第二个代码有解释。先处理!last再处理last,因为 last落子要除掉!last。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

const int N = 50;
char g[N][N];
int vis[N][N], num[N][N]; // 标记以及气数 
int cnt;

int dx[4] = {-1,0,1,0},dy[4] = {0,-1,0,1};

// 找某位置连通块气数
void dfs(int x,int y) {
	vis[x][y] = 1;
	
	for(int i = 0; i < 4; i ++) {
		int a = x+dx[i], b = y+dy[i];
		if(a<1||b<1||a>9||b>9) continue;
		
		if(!vis[a][b] && g[a][b]=='*') {
			cnt ++, vis[a][b] = 1;
		}
		else if(!vis[a][b] && g[a][b] == g[x][y]) 
			dfs(a,b);
	}
} 

int main() {
	char last; cin >> last;
	for(int i = 1; i <= 9; i ++) {
		for(int j = 1; j <= 9; j ++) {
			cin >> g[i][j];
		}
	}
	
	// 找非last 气数以及替换
	for(int i = 1; i <= 9; i ++) {
		for(int j = 1; j <= 9; j ++) {
			if(g[i][j] != last && g[i][j]!='*') {
				memset(vis,0,sizeof vis); cnt = 0;
				
				dfs(i,j); num[i][j] = cnt;
			}
		}
	} 
	for(int i = 1; i <= 9; i ++) {
		for(int j = 1; j <= 9; j ++) {
			if(g[i][j]!=last && !num[i][j]) {
				g[i][j] = '*';
			}
		}
	}
	
	//last 气数以及替换
	for(int i = 1; i <= 9; i ++) {
		for(int j = 1; j <= 9; j ++) {
			if(g[i][j]==last && g[i][j]!='*') {
				memset(vis,0,sizeof vis); cnt = 0;
				
				dfs(i,j); num[i][j] = cnt;
			}
		}
	} 
	for(int i = 1; i <= 9; i ++) {
		for(int j = 1; j <= 9; j ++) {
			if(g[i][j]==last && !num[i][j]) {
				g[i][j] = '*';
			}
		}
	}
	
	// 输出
	for(int i = 1; i <= 9; i ++) {
		for(int j = 1; j <= 9; j ++) {
			cout << g[i][j];
		}
		puts("");
	} 
	return 0;
}

加函数封装简短一点

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

const int N = 50;
char g[N][N];
int vis[N][N], num[N][N];
int cnt;

int dx[4] = {-1,0,1,0}, dy[4] = {0,1,0,-1};
//找气数 
void dfs(int x, int y) {
	vis[x][y] = 1;
	
	for(int i = 0; i < 4; i ++) {
		int a = x+dx[i], b = y+dy[i];
		if(a<1||b<1||a>9||b>9) continue;
		
		if(!vis[a][b] && g[a][b]=='*') {
			cnt ++, vis[a][b] = 1;
		}
		else if(!vis[a][b] && g[a][b]==g[x][y]) {
			dfs(a,b);
		}
	}
}
// 找ch气数
void find(char ch) {
	for(int i = 1; i <= 9; i ++) {
		for(int j = 1; j <= 9; j ++) {
			if(g[i][j]==ch) { //三种元素多加一个!='*' 判断。
			//用函数封装了不加也可以,传newlast 
				memset(vis,0,sizeof vis); cnt = 0;
				dfs(i,j); num[i][j] = cnt;
			}
		}
	}
} 
//替换 ch
void solve(char ch) {
	for(int i = 1; i <= 9; i ++) {
		for(int j = 1; j <= 9; j ++) {
			if(g[i][j]==ch && !num[i][j]) 
				g[i][j]= '*';
		}
	}
} 

int main() {
	char last; cin >> last;
	//要先处理非最后一个落子的,因为last 要除去 newlast 
	
	for(int i = 1; i <= 9; i ++) {
		for(int j = 1; j <= 9; j ++) {
			cin >> g[i][j];
		}
	}
	char newlast;
	if(last == 'B') newlast = 'W';
	else newlast = 'B';
	
	find(newlast); solve(newlast);
	
	find(last); solve(last);
	
	// 处理完输出
	for(int i = 1; i <= 9; i ++) {
		for(int j = 1; j <= 9; j ++) {
			cout << g[i][j];
		}
		puts("");
	} 
	return 0;
}
 

D.1726: Advanced InferenceⅠ

Advanced InferenceⅠ - 问题 - 软件学院OJ

代码

对1取模都是0,满1为0。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

using ll = long long;

int main() {
	ll n, k;
	cin >> n >> k;
	cout << 0 << endl;
	return 0;
}

E.Advanced Inference Ⅱ

Advanced Inference Ⅱ - 问题 - 软件学院OJ

代码

常数的导数 是0

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

using ll = long long;

int main() {
	ll n, k;
	cin >> n >> k;
	cout << 0 << endl;
	return 0;
}

F. Advanced Inference Ⅲ

Advanced Inference Ⅲ - 问题 - 软件学院OJ

代码

n阶求导是 k*n!

如果n < 10 k*n!

如果n>=10 k*n! 对n-2 取模是0,因为其中有(n-2) 因子

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

using ll = long long;
ll n, k;
ll ans;

int main() {
	cin >> k >> n;
	if(n>=10) cout << 0 << endl;
	else {
		ans = k;
		for(int i = 1; i <= n; i ++) {
			ans *= i;
		}
		cout << ans << endl;
	}
	
	return 0;
}

G.Intemperance Ⅰ

Intemperance Ⅰ - 问题 - 软件学院OJ

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

using ll = long long;
ll n, m;
const int N = 1e6+10;
ll a[N];


int main() {
	cin >> n >> m;
	ll w = 0, ans = 1;
	for(int i = 1; i <= n; i ++) cin >> a[i];
	
	for(int i = 1; i <= n; i ++) { 
		if(w+a[i]<=m) {
			w += a[i];
		}
		else { // 当前满了 
			ans ++; 
			w = a[i];//更新重装本轮 
		}
	}
	
	cout << ans << endl;
	return 0;
}

H.Intemperance Ⅱ

Intemperance Ⅱ - 问题 - 软件学院OJ

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int n;
int sum = 0, length;
int main() {
	cin >> n;
	int t = n;
	for(int i = 1; sum <= n; i += 2,sum+=i) {
		length ++;
	}
	cout << length << endl;
	return 0;
}
相关推荐
RaymondZhao345 分钟前
【全面推导】策略梯度算法:公式、偏差方差与进化
人工智能·深度学习·算法·机器学习·chatgpt
zhangfeng113314 分钟前
DBSCAN算法详解和参数优化,基于密度的空间聚类算法,特别擅长处理不规则形状的聚类和噪声数据
算法·机器学习·聚类
啊阿狸不会拉杆1 小时前
《算法导论》第 32 章 - 字符串匹配
开发语言·c++·算法
小学生的信奥之路1 小时前
洛谷P3817题解:贪心算法解决糖果分配问题
c++·算法·贪心算法
曙曙学编程2 小时前
stm32——GPIO
c语言·c++·stm32·单片机·嵌入式硬件
你知道网上冲浪吗2 小时前
【原创理论】Stochastic Coupled Dyadic System (SCDS):一个用于两性关系动力学建模的随机耦合系统框架
python·算法·数学建模·数值分析
△曉風殘月〆3 小时前
Visual Studio中的常用调试功能(下)
c++·ide·visual studio·调试
武当豆豆3 小时前
C++编程学习(第25天)
开发语言·c++·学习
地平线开发者4 小时前
征程 6 | PTQ 精度调优辅助代码,总有你用得上的
算法·自动驾驶
Tisfy4 小时前
LeetCode 837.新 21 点:动态规划+滑动窗口
数学·算法·leetcode·动态规划·dp·滑动窗口·概率