河工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;
}
相关推荐
地平线开发者6 小时前
Transformer模型部署之性能优化指南
算法
地平线开发者6 小时前
人在途中:从“编译失败”到“模型可落地”——CUDA 自定义算子
算法·自动驾驶
半个落月9 小时前
从递归到快速排序:用 JavaScript 把分治思想讲明白
javascript·算法·面试
小月土星10 小时前
JavaScript 快速排序:从 pivot、双指针到分治思想
javascript·算法·面试
小月土星10 小时前
JavaScript 递归入门:从 1 到 n 求和,再到数组扁平化
javascript·算法·面试
To_OC1 天前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode
鱼鱼不愚与1 天前
《原来如此 | 第01期:为什么导航软件能预测红绿灯倒计时?》
算法
博客18001 天前
酷宝的使用方法,超好用的免费界面库,C++、MFC可用
c++·mfc·界面库·库来帮·酷宝
郝学胜_神的一滴1 天前
CMake 026:属性体系精讲、四大作用域全解 & 实战代码落地
c++·cmake