From b7b8af4811f2ca9f5b31995cfc28b3e1be65b1fa Mon Sep 17 00:00:00 2001 From: unlockable Date: Sun, 5 Nov 2023 15:13:10 +0800 Subject: [PATCH] Use long long. --- 2023204/main.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/2023204/main.cpp b/2023204/main.cpp index 4f42929..2850d9f 100644 --- a/2023204/main.cpp +++ b/2023204/main.cpp @@ -5,28 +5,28 @@ // alive. xxx_num denotes the count as the question described. int ans[200] = {0}; -int dead_nodes_num[105] = {0}; +long long dead_nodes_num[105] = {0}; int total_dead_nodes = 0; -int target_nodes_num[105] = {0}; +long long target_nodes_num[105] = {0}; int total_target_nodes = 0; struct SeveralContinuedDeadNode { bool status; - int length; // Caution that when status == dead and length == 1, the node itself is alive. + long long length; // Caution that when status == dead and length == 1, the node itself is alive. }; struct SearchResult { int next_ans_pos; // pos in the ans[] array. - int count_in_father_line; // natural count. + long long count_in_father_line; // natural count. }; -SearchResult find_node(int target, int start_num, int next_dead_node_num_ptr, - SeveralContinuedDeadNode *upper_line, int upper_line_segment_count, +SearchResult find_node(long long target, long long start_num, int next_dead_node_num_ptr, + SeveralContinuedDeadNode *upper_line, long long upper_line_segment_count, int layer) { - int spawned_node_max_num = start_num - 1; - int segment_count = upper_line_segment_count; + long long spawned_node_max_num = start_num - 1; + long long segment_count = upper_line_segment_count; SeveralContinuedDeadNode current_line_node[200] = {0}; - int current_line_len = 0; + long long current_line_len = 0; bool all_dead = true; // Spawing all the nodes in current line @@ -38,7 +38,7 @@ SearchResult find_node(int target, int start_num, int next_dead_node_num_ptr, } else { all_dead = false; - int total_spawned_after = spawned_node_max_num + upper_line[upper_line_iter].length * 2; + long long total_spawned_after = spawned_node_max_num + upper_line[upper_line_iter].length * 2; while (dead_nodes_num[next_dead_node_num_ptr] <= total_spawned_after && next_dead_node_num_ptr < total_dead_nodes) { if (dead_nodes_num[next_dead_node_num_ptr] - spawned_node_max_num > 1) { @@ -70,7 +70,7 @@ SearchResult find_node(int target, int start_num, int next_dead_node_num_ptr, if (target <= spawned_node_max_num) { ans[0] = target; - int natural_pos = -1, num = start_num - 1; + long long natural_pos = -1, num = start_num - 1; for (int i = 0; i < current_line_len; i++) { if (current_line_node[i].status == DEAD) { natural_pos += current_line_node[i].length; @@ -102,7 +102,7 @@ SearchResult find_node(int target, int start_num, int next_dead_node_num_ptr, return SearchResult{1, -1}; } - int natural_count = -1, num = start_num - 1; + long long natural_count = -1, num = start_num - 1; for (int i = 0; i < current_line_len; i++) { natural_count += current_line_node[i].length; if (current_line_node[i].status == ALIVE || current_line_node[i].length == 1) { @@ -131,10 +131,10 @@ int main() { } } else { - int current_target = 0; + long long current_target = 0; SeveralContinuedDeadNode firstline = SeveralContinuedDeadNode{ALIVE, 1}; for (int i = 0; i < total_target_nodes; i++) { - scanf("%d", ¤t_target); + scanf("%lld", ¤t_target); SearchResult result = find_node(current_target, 2, 0, &firstline, 1, 2); if (result.count_in_father_line == -1) { printf("0\n");