河工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;
}
相关推荐
0xCC说逆向21 分钟前
Windows图形界面(GUI)-QT-C/C++ - QT 对话窗口
java·c语言·开发语言·c++·windows·qt·microsoft
计算机小混子25 分钟前
C++实现设计模式---享元模式 (Flyweight)
c++·设计模式·享元模式
计算机小混子28 分钟前
C++实现设计模式---迭代器模式 (Iterator)
c++·设计模式·迭代器模式
0xCC说逆向32 分钟前
Windows图形界面(GUI)-QT-C/C++ - Qt按钮控件详解
c语言·开发语言·c++·windows·qt·win32
若亦_Royi34 分钟前
C++通透讲解设计模式:依赖倒转(1)
开发语言·c++·设计模式
smj2302_796826521 小时前
解决leetcode第3418题机器人可以获得的最大金币数
python·算法·leetcode
KeyPan1 小时前
【机器学习:三十三(二)、支持向量机(SVM)的核函数:概念、类型与应用】
人工智能·神经网络·算法·机器学习·支持向量机·数据挖掘
dundunmm1 小时前
【论文阅读】End-to-End Adversarial-Attention Network for Multi-Modal Clustering
论文阅读·算法·数据挖掘·聚类·对抗学习·核映射·多视图聚类
Zfox_1 小时前
【Linux】Socket编程-TCP构建自己的C++服务器
linux·服务器·c语言·c++·tcp/ip
beyond阿亮1 小时前
llama.cpp编译和运行 API调用
c++·人工智能·ai·llama