A.GO LecturesⅠ—— Victory
GO LecturesⅠ—— Victory - 问题 - 软件学院OJ
代码
统计
#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搜索四个方向。
#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。
#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;
}
加函数封装简短一点
#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。
#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
#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) 因子
#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
代码
#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
代码
#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;
}