Leaftechblog

Leaf-blog

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <bits/stdc++.h>
using namespace std;
struct boss{
int r,c,s,t;
};
int main ()
{
int n,m,k;
cin>>n>>m>>k;
vector<vector<bool>>map(n,vector<bool>(m,false));
vector<boss>boss_message;
for (int i = 0; i<k; i++) {
int r,c,s,t;
cin>>r>>c>>s>>t;
boss_message.push_back({r,c,s,t});
map[r][c] = true;
}
vector<bool>die(k,false);
while (true) {
bool boss_check = true;
for (auto p : die) {
if (p == false) {
boss_check = false;
break;
}
}
if (boss_check) {
break;
}
set<pair<int, int>>bomb;
vector<pair<int, int>>locate;
for (int i = 0; i<n; i++) {
for (int j = 0; j<m; j++) {
if (map[i][j] == true) {
bomb.insert({i,j});
}
}
}
vector<pair<int, int>>erase;
for (int i = 0; i<boss_message.size(); i++) {
if (die[i] == true) {
locate.push_back({-1,-1});
continue;
}
int x = boss_message[i].r;
int y = boss_message[i].c;
bomb.insert({x,y});
int move_x = boss_message[i].s;
int move_y = boss_message[i].t;
int nx= x+move_x;
int ny= y+move_y;
if (nx>=0 && ny>= 0 && nx<n && ny<m) {
if (!map[nx][ny]) {
boss_message[i].r = nx;
boss_message[i].c = ny;
} else {
erase.push_back({nx,ny});
die[i] = true;
}
} else {
die[i] = true;
}
locate.push_back({nx,ny});
}
for (int i = 0; i<locate.size(); i++) {
if (locate[i].first == -1 && locate[i].second == -1) {
continue;
}
if (bomb.count({locate[i].first,locate[i].second}) == true) {
//bomb.erase(bomb.find(locate[i]));
erase.push_back({locate[i]});
die[i] = true;
}
}
for (auto p : erase) {
map[p.first][p.second] = false;
if (bomb.count(p)) {
bomb.erase(p);
}
}
for (auto p : bomb) {
map[p.first][p.second] = true;
}
}
int ans = 0;
for (int i = 0; i<n; i++) {
for (int j = 0; j<m; j++) {
if (map[i][j] == true) {
ans++;
}
}
}
cout<<ans<<endl;
return 0;
}

AC (9ms, 424KB)
(額外發現,這明明可以AC,但結構卻會讓除了Gemini的AI看不懂)

閱讀全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
vector<vector<string>>nums(n,vector<string>(n));
vector<string>words;
for (int i = 0; i<n; i++) {
string m;
cin>>m;
words.push_back(m);
}
for (int i = 0; i<n; i++) {
for (int j = 0; j<n; j++) {
nums[i][j] = words[i][j];
}
}
vector<vector<string>>ans = nums;
for (int i = 0; i<n; i++) {
for(int j = 0;j<n;j++)
{
if (nums[i][j] == "*") {
for (int k = 0; k<n; k++) {
ans[i][k] = "*";
}
for (int k = 0; k<n; k++) {
ans[k][j] = "*";
}
}
}
}
for (int i = 0; i<n; i++) {
for (int j = 0; j<n; j++) {
if (j == n-1) {
cout<<ans[i][j]<<endl;
continue;
}
cout<<ans[i][j];
}
}
return 0;
}
閱讀全文 »

1.https://www.dropbox.com/scl/fi/v4c6k5va7m214ju6an8c6/BBQ-zh_TW.pdf?rlkey=m724m8rhyy95ljjw0v0lbyt37&st=3e2ty6yp&dl=0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <bits/stdc++.h>
using namespace std;
int main ()
{
int n,m;
cin>>n>>m;
map<int, int>num;
for (int i = 0; i<n; i++) {
int y;
cin>>y;
num[y]++;
}
map<int, int>ppl;
for (int i = 0; i<m; i++) {
int o ;
cin>>o;
for (int j = 0; j<o; j++) {
int y;
cin>>y;
ppl[y]++;
}
}
int x = 0;
int y = 0;
for (auto p: num) {
int item = p.first;
int n = p.second;
int order = ppl[item];
if (n>order) {
x+=(n-order);
}
}
for (auto p : ppl) {
int item = p.first;
int ordered = p.second;
int u = num[item];
if (ordered>u) {
y+=(ordered - u);
}
}
cout<<x<<" "<<y<<endl;
}

2.https://www.dropbox.com/scl/fi/0z9qkrvnupctmsqmwtyqy/Club-zh_TW.pdf?rlkey=heisbq3euo6zwz3a0j27pk9dz&st=hn77u1fo&dl=0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <bits/stdc++.h>
using namespace std;
int main ()
{
int n,m;
cin>>n>>m;
map<string, int>club;
vector<string>order;
for (int i = 0; i<m; i++) {
string h;
cin>>h;
order.push_back(h);
club[h] = 0;
}
for (int i = 0; i<n; i++) {
set<string>temp;
string one,two,three;
cin>>one>>two>>three;
temp.insert(one);
temp.insert(two);
temp.insert(three);
for (auto p : temp) {
club[p]++;
}
}
for (auto p : order) {
cout<<p<<" "<<club[p]<<endl;
}
return 0;
}

3.https://www.dropbox.com/scl/fi/ixv36h7n3t0m9pdj4t7fg/Doodle-zh_TW.pdf?rlkey=ezjstbssvn6yoldtidgh51mit&st=m47xn082&dl=0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <bits/stdc++.h>
using namespace std;
int dx[] = {1,0,-1,0};
int dy[] = {0,1,0,-1};
int dfs(int start_x,int start_y,vector<vector<int>>&num,vector<vector<bool>>&visited)
{
int ans = 0;
if (visited[start_x][start_y]!=true) {
visited[start_x][start_y] = true;
if (num[start_x][start_y] == 1) {
ans = 1;
}
for (int i = 0; i<4; i++) {
int nx = start_x+dx[i];
int ny = start_y+dy[i];
if (ny<num[0].size() && nx<num.size() && nx>=0 && ny >= 0 && num[nx][ny] == 1) {
ans+=dfs(nx, ny, num, visited);
}
}
visited[start_x][start_y] = false;
}
return ans;
}
int main ()
{
int x,y;
cin>>x>>y;
vector<vector<int>>num(x,vector<int>(y));
for (int i = 0; i<x; i++) {
for (int j = 0; j<y; j++) {
cin>>num[i][j];
}
}
int ans = 0;
vector<vector<bool>>visited(x,vector<bool>(y,false));
for (int i = 0; i<x; i++) {
for (int j = 0; j<y; j++) {
if (num[i][j] == 1) {
for (auto &row : visited) {
fill(row.begin(),row.end(),false);
}
int count = dfs(i, j, num, visited);
ans = max(count,ans);
}
}
}
cout<<ans<<endl;
}

但似乎第三題解法好像沒有很好就是

閱讀全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <bits/stdc++.h>
using namespace std;
int main ()
{
int m,n,k,r,c;
cin>>m>>n>>k>>r>>c;
vector<vector<int>>num(m,vector<int>(n));
for (int i = 0; i<m; i++) {
for (int j = 0; j<n; j++) {
cin>>num[i][j];
}
}
int x = r;
int y = c;
int source = 0;
int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};
int dir = 0;
int stone = 0;
while (num[x][y] != 0) {
source+=num[x][y];
num[x][y]--;
stone++;
if (source % k == 0) {
dir = (dir + 1) % 4;
if (x+dx[dir]<m && y+dy[dir]<n&&x+dx[dir]>=0&&y+dy[dir]>=0 && num[x+dx[dir]][y+dy[dir]] != -1) {
x+=dx[dir];
y+=dy[dir];
} else {
while (x+dx[dir]>=m || y+dy[dir]>=n || x+dx[dir] <0 || y+dy[dir] <0 || num[x+dx[dir]][y+dy[dir]] == -1) {
dir = (dir + 1) % 4 ;
}
x+=dx[dir];
y+=dy[dir];
}
} else {
if (x+dx[dir]<m && y+dy[dir]<n&&x+dx[dir]>=0&&y+dy[dir]>=0 && num[x+dx[dir]][y+dy[dir]] != -1) {
x+=dx[dir];
y+=dy[dir];
} else {
while (x+dx[dir]>=m || y+dy[dir]>=n || x+dx[dir] <0 || y+dy[dir] <0 || num[x+dx[dir]][y+dy[dir]] == -1) {
dir = (dir + 1) % 4;
}
x+=dx[dir];
y+=dy[dir];
}
}
}
cout<<stone<<endl;
}
閱讀全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <bits/stdc++.h>
#include <string>
using namespace std;
int main() {
int N;
cin>>N;
string ans = "";
if (N<=2500) {
ans+="1";
int x = (N-1) /25+1;
int y = (N-1)%25+1;
ans+=" ";
ans+=to_string(x);
ans+=" ";
ans+=to_string(y);
} else if (N<=2500+5000) {
ans+="2";
N-=2500;
int x = (N-1)/50+1;
int y = (N-1)%50+1;
ans+=" ";
ans+=to_string(x);
ans+=" ";
ans+=to_string(y);
} else {
ans+="3";
N-=2500+5000;
int x = (N-1)/25+1;
int y = (N-1)%25+1;
ans+=" ";
ans+=to_string(x);
ans+=" ";
ans+=to_string(y);
}
cout<<ans<<endl;
return 0;
}

閱讀全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>>change(int o,vector<vector<int>>&n)
{
int R = n.size();
int C = n[0].size();
vector<vector<int>>res;
switch (o) {
case 0:
res.resize(C,vector<int>(R));
for (int i = 0; i<R; i++) {
for (int j = 0; j<C; j++) {
res[C-1-j][i] = n[i][j];
}
}
break;
case 1:
res = n;
for (int i = 0; i<R/2; i++) {
swap(res[i],res[R-1-i]);
}
break;
}
return res;
}
int main ()
{
int R,C,M;
cin>>R>>C>>M;
vector<vector<int>>num(R,vector<int>(C));
for (int i = 0; i<R; i++) {
for (int j = 0; j<C; j++) {
cin>>num[i][j];
}
}
vector<int>change_num;
for (int i = 0; i<M; i++) {
int y;
cin>>y;
change_num.push_back(y);
}
for (int i = M -1;i>=0;i--) {
num = change(change_num[i],num);
}
cout<<num.size()<<" "<<num[0].size()<<endl;
for (int i = 0; i<num.size(); i++) {
for (int j = 0; j<num[0].size(); j++) {
if (j==num[0].size()-1) {
cout<<num[i][j];
} else {
cout<<num[i][j]<<" ";
}
}
cout<<endl;
}
return 0;
}
閱讀全文 »

註:底下程式僅供參考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <bits/stdc++.h>
using namespace std;
int main ()
{
int n,m;
cin>>n>>m;
vector<pair<int, int>>num;
for (int i = 0; i<m; i++) {
int x,y;
cin>>x>>y;
num.push_back({x,y});
}
if (n == 1) {
cout<<1<<endl;
} else {
cout<<2<<endl;
}
return 0;
}

為啥?理由很簡單,首先,題目所敘述的就是一顆樹,其中題目仔細看的話,「給定N個節點和M條邊,判斷這些邊是否形成一棵樹」,不就除非n==1,否則答案一定是2

閱讀全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <bits/stdc++.h>
using namespace std;
int main ()
{
int F,N;
cin>>F;
cin>>N;
vector<int>num(N);
for (int i = 0; i<N; i++) {
cin>>num[i];
}
int brother = F;
bool end = true;
int pre_sister = -1;
for (int i = 0; i<N; i++) {
int sister = num[i];
if (i!=0) {
pre_sister = num[i-1];
brother = pre_sister;
}
if (i >= 2 && num[i-2] == num[i-1]) {
switch (pre_sister) {
case 0: brother = 5; break;
case 2: brother = 0; break;
case 5: brother = 2; break;
}
}
cout<<brother<<" ";
if (brother == num[i]) {
continue;
}
if (brother == 0 && sister == 5) {
end = false;
cout<<": Lost at round "<<i+1<<endl;
break;
}
if (brother == 0 && sister == 2) {
end = false;
cout<<": Won at round "<<i+1<<endl;
break;
}
if (brother == 2 && sister == 5) {
end = false;
cout<<": Won at round "<<i+1<<endl;
break;
}
if (brother == 2 && sister == 0) {
end = false;
cout<<": Lost at round "<<i+1<<endl;
break;
}
if (brother == 5 && sister == 0) {
end = false;
cout<<": Won at round "<<i+1<<endl;
break;
}
if (brother == 5 && sister == 2) {
end = false;
cout<<": Lost at round "<<i+1<<endl;
break;
}
}
if (end) {
cout<<": Drew at round "<<N<<endl;
}
return 0;
}
閱讀全文 »

首先先透過底下簡單的code得知密碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <bits/stdc++.h>
using namespace std;
int main ()
{
int t = 'J';
int a = 'C';
cout<<t-a<<endl;
string num;
cin>>num;
string n ="";
for (int i = 0; i<num.size(); i++) {
n+= num[i]-7;
}
cout<<n<<endl;
}

輸入輸出:

1
2
3
4
5
nolan@nolan-MS-7C31:~/文件/code$ g++ a009.cpp -o a009
nolan@nolan-MS-7C31:~/文件/code$ ./a009
1JKJ'pz'{ol'{yhklthyr'vm'{ol'Jvu{yvs'Kh{h'Jvywvyh{pvu5
*CDC is the trademark of the Control Data Corporation.
nolan@nolan-MS-7C31:~/文件/code$

接下來就把輸入-7就好

1
2
3
4
5
6
7
8
9
10
11
12
#include <bits/stdc++.h>
using namespace std;
int main ()
{
string n;
cin>>n;
string a ="";
for (int i = 0; i<n.size(); i++) {
a+=n[i]-7;
}
cout<<a<<endl;
}
閱讀全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <bits/stdc++.h>
using namespace std;
int main ()
{
int n,m;
cin>>n>>m;
vector<vector<int>>num(n,vector<int>(m));
for (int i = 0; i<n; i++) {
for (int j=0; j<m; j++) {
cin>>num[i][j];
}
}
vector<vector<int>>ans(n,vector<int>(m,0));
for (int i = 0; i<n; i++) {
for (int j = 0; j<m; j++) {
if (num[i][j] == 1) {
ans[i][j] += 1;
if (i-1 >= 0) {
ans[i-1][j] += 1;
}
if (i+1 < n) {
ans[i+1][j] += 1;
}
if (j+1 < m) {
ans[i][j+1] += 1;
}
if (j-1 >= 0) {
ans[i][j-1] += 1;
}
} else if (num[i][j] == 2) {
for (int k = 0; k<m; k++) {
ans[i][k] += 1;
}
for (int k = 0; k<n; k++) {
ans[k][j] += 1;
}
ans[i][j] -= 1;
}
}
}
for (int i = 0; i<n; i++) {
for (int j = 0; j<m; j++) {
cout<<ans[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
閱讀全文 »
0%