• Codeforces Round 909 (Div. 3)(A~G)(启发式合并)


    1899A - Game with Integers 

            题意:给定一个数 x , 两个人玩游戏,每人能够执行 +1 / -1操作,若操作完x是3的倍数则获胜,问先手的人能否获胜(若无限循环则先手的人输)。

            思路:假如一个数模3余1或者2,那么第一轮操作先手就能获胜,若余0则后手获胜。

            

    1. // Problem: A. Game with Integers
    2. // Contest: Codeforces - Codeforces Round 909 (Div. 3)
    3. // URL: https://codeforces.com/contest/1899/problem/A
    4. // Memory Limit: 256 MB
    5. // Time Limit: 1000 ms
    6. //
    7. // Powered by CP Editor (https://cpeditor.org)
    8. #include
    9. using namespace std;
    10. #define LL long long
    11. #define pb push_back
    12. #define x first
    13. #define y second
    14. #define endl '\n'
    15. const LL maxn = 4e05+7;
    16. const LL N=1e05+10;
    17. const LL mod=1e09+7;
    18. typedef pair<int,int>pl;
    19. priority_queue, greater >t;
    20. priority_queue q;
    21. LL gcd(LL a, LL b){
    22. return b > 0 ? gcd(b , a % b) : a;
    23. }
    24. LL lcm(LL a , LL b){
    25. return a / gcd(a , b) * b;
    26. }
    27. int n , m;
    28. int a[N];
    29. void init(int n){
    30. for(int i = 0 ; i <= n ; i ++){
    31. a[i] = 0;
    32. }
    33. }
    34. void solve()
    35. {
    36. cin >> n;
    37. if(n % 3 == 0){
    38. cout << "Second\n";
    39. }
    40. else{
    41. cout << "First\n";
    42. }
    43. }
    44. int main()
    45. {
    46. ios::sync_with_stdio(false);
    47. cin.tie(0);
    48. cout.tie(0);
    49. cout.precision(10);
    50. int t=1;
    51. cin>>t;
    52. while(t--)
    53. {
    54. solve();
    55. }
    56. return 0;
    57. }

    1899B - 250 Thousand Tons of TNT  

            题意:给定一个整数n , 表示有 n 个集装箱,接下来给定一个数组a , 代表了第i个集装箱有a_{i}吨重。现要将n个集装箱恰好分成连续的k组。要求这当中所有k的取值下集装箱重量的最大值减去最小值的最大值。

            思路:直接暴力做 , 假设每一组有1、2、3、4、...n个,看满足题意的情况下最大值减最小值的值。时间复杂度O(NlogN).

            

    1. // Problem: B. 250 Thousand Tons of TNT
    2. // Contest: Codeforces - Codeforces Round 909 (Div. 3)
    3. // URL: https://codeforces.com/contest/1899/problem/B
    4. // Memory Limit: 256 MB
    5. // Time Limit: 2000 ms
    6. //
    7. // Powered by CP Editor (https://cpeditor.org)
    8. #include
    9. using namespace std;
    10. #define LL long long
    11. #define pb push_back
    12. #define x first
    13. #define y second
    14. #define endl '\n'
    15. const LL maxn = 4e05+7;
    16. const LL N=2e05+10;
    17. const LL mod=1e09+7;
    18. typedef pair<int,int>pl;
    19. priority_queue, greater >t;
    20. priority_queue q;
    21. LL gcd(LL a, LL b){
    22. return b > 0 ? gcd(b , a % b) : a;
    23. }
    24. LL lcm(LL a , LL b){
    25. return a / gcd(a , b) * b;
    26. }
    27. int n , m;
    28. LL a[N] , sum[N];
    29. void init(int n){
    30. for(int i = 0 ; i <= n ; i ++){
    31. a[i] = 0;
    32. }
    33. }
    34. void solve()
    35. {
    36. cin >> n;
    37. for(int i = 1 ; i <= n ; i ++){
    38. cin >> a[i];
    39. sum[i] = sum[i - 1] + a[i];
    40. }
    41. LL ans = 0;
    42. for(int i = 1 ; i <= n ; i ++){
    43. LL maxx = 0 , minn = 1e18;
    44. if(n % i == 0){
    45. for(int j = 0 ; j < n ; j += i){
    46. maxx = max(sum[j + i] - sum[j] , maxx);
    47. minn = min(minn , sum[j + i] - sum[j]);
    48. }
    49. ans = max(ans , maxx - minn);
    50. }
    51. }
    52. cout << ans<
    53. }
    54. int main()
    55. {
    56. ios::sync_with_stdio(false);
    57. cin.tie(0);
    58. cout.tie(0);
    59. cout.precision(10);
    60. int t=1;
    61. cin>>t;
    62. while(t--)
    63. {
    64. solve();
    65. }
    66. return 0;
    67. }

    1899C - Yarik and Array  

            题意:给定一组序列,求连续奇数偶数非空子序列的和的最大值(相邻的奇偶性不能相同)。

            思路:同最大连续子序列差不多的做法,只不过要求前一项和当前的奇偶性不同,且至少要选一项。时间O(N)。

            

    1. // Problem: C. Yarik and Array
    2. // Contest: Codeforces - Codeforces Round 909 (Div. 3)
    3. // URL: https://codeforces.com/contest/1899/problem/C
    4. // Memory Limit: 256 MB
    5. // Time Limit: 1000 ms
    6. //
    7. // Powered by CP Editor (https://cpeditor.org)
    8. #include
    9. using namespace std;
    10. #define LL long long
    11. #define pb push_back
    12. #define x first
    13. #define y second
    14. #define endl '\n'
    15. const LL maxn = 4e05+7;
    16. const LL N=2e05+10;
    17. const LL mod=1e09+7;
    18. typedef pair<int,int>pl;
    19. priority_queue, greater >t;
    20. priority_queue q;
    21. LL gcd(LL a, LL b){
    22. return b > 0 ? gcd(b , a % b) : a;
    23. }
    24. LL lcm(LL a , LL b){
    25. return a / gcd(a , b) * b;
    26. }
    27. int n , m;
    28. LL a[N];
    29. int dp[N][2];
    30. void init(int n){
    31. for(int i = 0 ; i <= n ; i ++){
    32. a[i] = 0;
    33. }
    34. }
    35. void solve()
    36. {
    37. int n;
    38. cin >> n;
    39. for(int i = 1 ; i <= n ; i ++)
    40. cin >> a[i];
    41. LL ans = -1e18;
    42. LL now = 0;
    43. for(int i = 1 ; i <= n ; i ++){
    44. if(now == 0){
    45. now += a[i];
    46. }
    47. else{
    48. if(abs(a[i]) % 2 == abs(a[i - 1]) % 2 ){
    49. now = a[i];
    50. }
    51. else{
    52. if(now > 0)
    53. now += a[i];
    54. else
    55. now = a[i];
    56. }
    57. }
    58. ans = max(ans , now);
    59. // cout << now << endl;
    60. if(now < 0)
    61. now = 0;
    62. }
    63. cout << ans << endl;
    64. }
    65. int main()
    66. {
    67. ios::sync_with_stdio(false);
    68. cin.tie(0);
    69. cout.tie(0);
    70. cout.precision(10);
    71. int t=1;
    72. cin>>t;
    73. while(t--)
    74. {
    75. solve();
    76. }
    77. return 0;
    78. }

    1899D - Yarik and Musical Notes 

            题意:给定一组数,要求数对(i , j)满足(2^{a_i})^{2^{a_{j}}} = (2^{a_j})^{2^{a_{i}}}(i < j)的数量。

            思路:构造辅助哈希nex(范围过大无法构造数组) , nex[i]标记了当前位置之后有多少个数字i。观察后发现 , 当 i = 1 ,j = 2/i = 2 , j = 1时能够满足,其余均需要i=j" role="presentation" style="position: relative;">i=j才能满足。因此对于1或者2而言,数对的数量为nex[1] +nex[2] ,其余的 i 构成的数对数量都是nex[i]。首先遍历一遍算出nex,然后再遍历一遍求答案,同时不断更新nex即可。

            

    1. // Problem: D. Yarik and Musical Notes
    2. // Contest: Codeforces - Codeforces Round 909 (Div. 3)
    3. // URL: https://codeforces.com/contest/1899/problem/D
    4. // Memory Limit: 256 MB
    5. // Time Limit: 1000 ms
    6. //
    7. // Powered by CP Editor (https://cpeditor.org)
    8. #include
    9. using namespace std;
    10. #define LL long long
    11. #define pb push_back
    12. #define x first
    13. #define y second
    14. #define endl '\n'
    15. const LL maxn = 4e05+7;
    16. const LL N=3e05+10;
    17. const LL mod=1e09+7;
    18. typedef pair<int,int>pl;
    19. priority_queue, greater >t;
    20. priority_queue q;
    21. LL gcd(LL a, LL b){
    22. return b > 0 ? gcd(b , a % b) : a;
    23. }
    24. LL lcm(LL a , LL b){
    25. return a / gcd(a , b) * b;
    26. }
    27. int n , m;
    28. int a[N];
    29. void init(int n){
    30. for(int i = 0 ; i <= n ; i ++){
    31. a[i] = 0;
    32. }
    33. }
    34. void solve()
    35. {
    36. cin >> n;
    37. unordered_mapmp;
    38. LL ans = 0;
    39. for(int i = 1 ; i <= n ; i ++){
    40. cin >> a[i];
    41. mp[a[i]]++;
    42. }
    43. for(int i = 1 ; i <= n ; i ++){
    44. mp[a[i]]--;
    45. if(a[i] == 1 || a[i] == 2){
    46. ans += mp[1] + mp[2];
    47. }
    48. else{
    49. ans += mp[a[i]];
    50. }
    51. }
    52. cout << ans << endl;
    53. }
    54. int main()
    55. {
    56. ios::sync_with_stdio(false);
    57. cin.tie(0);
    58. cout.tie(0);
    59. cout.precision(10);
    60. int t=1;
    61. cin>>t;
    62. while(t--)
    63. {
    64. solve();
    65. }
    66. return 0;
    67. }

    1899E - Queue Sort  

            题意:给定一个数组,每次能够进行如下操作:

    1、选择第一个数放入数组最后一个。

    2、将最后一个数往前交换,直到到达第一位或者比前一个数大为止。

            问将数组变为递增的最少操作数,若无法则输出-1.

            思路:若最小的数为数组第一个,那么一轮操作之后他还是在第一位,这样便会无限循环。因此只需要满足最小的数之后的数全是递增的即可。

            

    1. // Problem: E. Queue Sort
    2. // Contest: Codeforces - Codeforces Round 909 (Div. 3)
    3. // URL: https://codeforces.com/contest/1899/problem/E
    4. // Memory Limit: 256 MB
    5. // Time Limit: 1000 ms
    6. //
    7. // Powered by CP Editor (https://cpeditor.org)
    8. #include
    9. using namespace std;
    10. #define LL long long
    11. #define pb push_back
    12. #define x first
    13. #define y second
    14. #define endl '\n'
    15. const LL maxn = 4e05+7;
    16. const LL N=3e05+10;
    17. const LL mod=1e09+7;
    18. typedef pair<int,int>pl;
    19. priority_queue, greater >t;
    20. priority_queue q;
    21. LL gcd(LL a, LL b){
    22. return b > 0 ? gcd(b , a % b) : a;
    23. }
    24. LL lcm(LL a , LL b){
    25. return a / gcd(a , b) * b;
    26. }
    27. int n , m;
    28. LL a[N];
    29. void init(int n){
    30. for(int i = 0 ; i <= n ; i ++){
    31. a[i] = 0;
    32. }
    33. }
    34. void solve()
    35. {
    36. cin >> n;
    37. LL minn = 1e18;
    38. for(int i = 1 ;i <= n ; i ++){
    39. cin >> a[i];
    40. minn = min(a[i] , minn);
    41. }
    42. /* for(int i = 1 ; i < n - 1; i++){
    43. if(a[i] < a[i + 1]){
    44. break;
    45. }
    46. if(i == n - 2){
    47. cout << 0 << endl;
    48. return;
    49. }
    50. }*/
    51. for(int i = 1 ; i <= n ; i ++){
    52. if(a[i] == minn){
    53. for(int j = i + 1; j <= n ; j ++){
    54. if(a[j] < a[j - 1]){
    55. cout << -1 << endl;
    56. return;
    57. }
    58. }
    59. cout << i - 1 << endl;
    60. return;
    61. }
    62. }
    63. }
    64. int main()
    65. {
    66. ios::sync_with_stdio(false);
    67. cin.tie(0);
    68. cout.tie(0);
    69. cout.precision(10);
    70. int t=1;
    71. cin>>t;
    72. while(t--)
    73. {
    74. solve();
    75. }
    76. return 0;
    77. }

    1899F - Alex's whims  

            题意:现有n个顶点,起初你可以任意构造将其形成一棵树。接下来有 d 个数,表示共有d轮。每一轮你可以选择一个已有的边将其删除,然后再连一条边形成一颗新的数。要求每一轮能够满足至少有两个叶子结点的距离恰好为d_{i}

            思路:首先可以将n个顶点连城一条链。然后每一轮当中,我们固定第一个点和最后一个点的距离为我们要的d_{i}。每次我们可以将与点1相连的边删去,然后新增一条边,使得刚好1到n的距离为d_{i}。由于结点2 ~ n都是一条链,所以2 ~ n - 1 任意一个距离都是可以构造出来的。如此便一定能够满足题意。所以我们只需要记录当前1结点和哪个结点相连,然后需要连到哪个结点即可。

            

    1. // Problem: F. Alex's whims
    2. // Contest: Codeforces - Codeforces Round 909 (Div. 3)
    3. // URL: https://codeforces.com/contest/1899/problem/F
    4. // Memory Limit: 256 MB
    5. // Time Limit: 1000 ms
    6. //
    7. // Powered by CP Editor (https://cpeditor.org)
    8. #include
    9. using namespace std;
    10. #define LL long long
    11. #define pb push_back
    12. #define x first
    13. #define y second
    14. #define endl '\n'
    15. const LL maxn = 4e05+7;
    16. const LL N=1e05+10;
    17. const LL mod=1e09+7;
    18. typedef pair<int,int>pl;
    19. priority_queue, greater >t;
    20. priority_queue q;
    21. LL gcd(LL a, LL b){
    22. return b > 0 ? gcd(b , a % b) : a;
    23. }
    24. LL lcm(LL a , LL b){
    25. return a / gcd(a , b) * b;
    26. }
    27. int n , m;
    28. int a[N];
    29. void init(int n){
    30. for(int i = 0 ; i <= n ; i ++){
    31. a[i] = 0;
    32. }
    33. }
    34. void solve()
    35. {
    36. cin >> n >> m;
    37. for(int i = 2 ; i <= n ; i ++){
    38. cout << i - 1 << " " << i << endl;
    39. }
    40. int pre = 2;
    41. for(int i = 0 ; i < m ; i ++){
    42. int x;
    43. cin >> x;
    44. int len = (n - pre) + 1;
    45. if(len == x){
    46. cout <<"-1 -1 -1\n";
    47. continue;
    48. }
    49. else{
    50. int to = (n - x + 1);
    51. cout << 1 << " " << pre << " " << to << endl;
    52. pre = to;
    53. }
    54. }
    55. }
    56. int main()
    57. {
    58. ios::sync_with_stdio(false);
    59. cin.tie(0);
    60. cout.tie(0);
    61. cout.precision(10);
    62. int t=1;
    63. cin>>t;
    64. while(t--)
    65. {
    66. solve();
    67. }
    68. return 0;
    69. }

    1899G - Unusual 进入tainment  

            思路:给定一棵树和一个排列p。现有q组询问,每组询问包含了三个数l , r , x。问点x的子树的结点是否在[p_{l} , p_{r}]中出现。

            思路:子树问题,首先想到了用dfs序来解决。对于一颗子树而言,我们可以用set来维护其所有结点在排列p中的位置。然后对于一个询问而言,只需要找到set中大于等于 l 的第一个位置即可,然后判断该位置是否小于等于r。若小于等于r则代表了其子树的结点包含在了[p_{l} , p_{r}]中。共有n个结点,所以我们需要创立n个set,来记录他们的结点在p中的位置。在子树向上合并的过程中,我们可以用启发式合并来实现优化:每一轮虽然是将子树的set合并到父节点的set上,但是可以用swap来交换两个set,确保每次都将小集合合并到大集合上面(swap是O(1)的)。如此总的时间复杂度是O(nlogn + qlogn)的。

            

    1. // Problem: G. Unusual Entertainment
    2. // Contest: Codeforces - Codeforces Round 909 (Div. 3)
    3. // URL: https://codeforces.com/contest/1899/problem/G
    4. // Memory Limit: 256 MB
    5. // Time Limit: 3000 ms
    6. //
    7. // Powered by CP Editor (https://cpeditor.org)
    8. #include
    9. using namespace std;
    10. #define LL long long
    11. #define pb push_back
    12. #define x first
    13. #define y second
    14. #define endl '\n'
    15. const LL maxn = 4e05+7;
    16. const LL N=2e05+10;
    17. const LL mod=1e09+7;
    18. typedef pair<int,int>pl;
    19. priority_queue, greater >t;
    20. priority_queue q;
    21. LL gcd(LL a, LL b){
    22. return b > 0 ? gcd(b , a % b) : a;
    23. }
    24. LL lcm(LL a , LL b){
    25. return a / gcd(a , b) * b;
    26. }
    27. int n , m;
    28. int a[N] , pos[N];
    29. vector<int>tr[N + 5];
    30. vectorint , 3 > >que[N];
    31. vectorint>> num(N);
    32. void init(int n){
    33. for(int i = 0 ; i <= n ; i ++){
    34. a[i] = 0 , tr[i].clear() , que[i].clear();
    35. num[i].clear();
    36. }
    37. }
    38. LL ans[N];
    39. void merge(set<int> &a , set<int>&b){
    40. if(a.size() < b.size()){
    41. swap(a , b);
    42. }
    43. for(auto it : b){
    44. a.insert(it);
    45. }
    46. b.clear();
    47. }
    48. void dfs(int cur , int f){
    49. num[cur].insert(pos[cur]);
    50. for(auto it : tr[cur]){
    51. if(it == f)
    52. continue;
    53. dfs(it , cur);
    54. merge(num[cur] , num[it]);
    55. }
    56. for(auto it : que[cur]){
    57. auto p = num[cur].lower_bound(it[0]);
    58. ans[it[2]] = p != num[cur].end() && *p <= it[1];
    59. }
    60. };
    61. void solve()
    62. {
    63. cin >> n >> m;
    64. for(int i = 1 ; i < n ; i++){
    65. int x , y;
    66. cin >> x >> y;
    67. tr[x].pb(y);
    68. tr[y].pb(x);
    69. }
    70. for(int i = 1 ; i <= n ; i ++){
    71. cin >> a[i];
    72. pos[a[i]] = i;
    73. }
    74. for(int i = 0 ; i < m ; i ++){
    75. int l , r , x;
    76. cin >> l >> r >> x;
    77. que[x].pb({l , r , i});
    78. }
    79. dfs(1 , 0);
    80. for(int i = 0 ; i < m ; i ++){
    81. if(ans[i]){
    82. cout <<"YES\n";
    83. }
    84. else{
    85. cout <<"NO\n";
    86. }
    87. }
    88. init(n);
    89. cout << endl;
    90. num.clear();
    91. }
    92. int main()
    93. {
    94. ios::sync_with_stdio(false);
    95. cin.tie(0);
    96. cout.tie(0);
    97. cout.precision(10);
    98. int t=1;
    99. cin>>t;
    100. while(t--)
    101. {
    102. solve();
    103. }
    104. return 0;
    105. }

            另外为何我这个会超时

    1. // Problem: G. Unusual Entertainment
    2. // Contest: Codeforces - Codeforces Round 909 (Div. 3)
    3. // URL: https://codeforces.com/contest/1899/problem/G
    4. // Memory Limit: 256 MB
    5. // Time Limit: 3000 ms
    6. //
    7. // Powered by CP Editor (https://cpeditor.org)
    8. #include
    9. using namespace std;
    10. #define LL long long
    11. #define pb push_back
    12. #define x first
    13. #define y second
    14. #define endl '\n'
    15. const LL maxn = 4e05+7;
    16. const LL N=1e05+10;
    17. const LL mod=1e09+7;
    18. typedef pair<int,int>pl;
    19. priority_queue, greater >t;
    20. priority_queue q;
    21. LL gcd(LL a, LL b){
    22. return b > 0 ? gcd(b , a % b) : a;
    23. }
    24. LL lcm(LL a , LL b){
    25. return a / gcd(a , b) * b;
    26. }
    27. int n , m;
    28. int a[N] , pos[N];
    29. vector<int>tr[N + 5];
    30. vectorint , 3 > >que[N];
    31. int vis[N];
    32. void init(int n){
    33. for(int i = 0 ; i <= n ; i ++){
    34. a[i] = 0 , tr[i].clear() , que[i].clear() , vis[i] = 0;
    35. }
    36. }
    37. LL l[N] , r[N] , id[N] , sz[N] , hs[N] , tot = 0 , ans[N];
    38. set<int>num;
    39. void dfs(int cur , int f){//重儿子 , 子树大小
    40. l[cur] = ++ tot;
    41. id[tot] = cur;//
    42. sz[cur] = 1;
    43. hs[cur] = -1;
    44. for(auto it : tr[cur]){
    45. if(it != f){
    46. dfs(it , cur);
    47. sz[cur] += sz[it];
    48. if(hs[cur] == -1 || sz[it] > sz[hs[cur]]){
    49. hs[cur] = it;
    50. }
    51. }
    52. }
    53. r[cur] = tot;
    54. }
    55. void dfs2(int cur , int f , int keep){
    56. for(auto it : tr[cur]){
    57. if(it != f && it != hs[cur]){
    58. dfs2(it , cur , 0);//轻儿子的信息无需保留
    59. }
    60. }
    61. if(hs[cur] != -1){
    62. dfs2(hs[cur] , cur , 1);
    63. }
    64. auto add = [&](int x){
    65. vis[x] = 1;
    66. num.insert(pos[x]);
    67. };
    68. auto del = [&](int x){
    69. vis[x] = 0;
    70. num.erase(pos[x]);
    71. };
    72. for(auto it : tr[cur]){
    73. if(it != f && it != hs[cur]){//轻儿子加入到重儿子当中
    74. for(int x = l[it] ; x <= r[it] ; x ++){
    75. if(!vis[id[x]])
    76. add(id[x]);
    77. }
    78. }
    79. }
    80. add(cur);
    81. for(auto it : que[cur]){//QLOGN
    82. auto p = lower_bound(num.begin() , num.end() , it[0]);
    83. int x = *p;
    84. // cout << cur <<" " << it[0] <<" "<< x << endl;
    85. if(x > it[1] || x < it[0]){
    86. ans[it[2]] = 0;
    87. }
    88. else{
    89. ans[it[2]] = 1;
    90. }
    91. }
    92. if(!keep){
    93. for(int x = l[cur] ; x <= r[cur] ; x ++){//NlogN
    94. del(id[x]);
    95. }
    96. }
    97. }
    98. void solve()
    99. {
    100. cin >> n >> m;
    101. for(int i = 1 ; i < n ; i++){
    102. int x , y;
    103. cin >> x >> y;
    104. tr[x].pb(y);
    105. tr[y].pb(x);
    106. }
    107. for(int i = 1 ; i <= n ; i ++){
    108. cin >> a[i];
    109. pos[a[i]] = i;
    110. }
    111. for(int i = 0 ; i < m ; i ++){
    112. int l , r , x;
    113. cin >> l >> r >> x;
    114. que[x].pb({l , r , i});
    115. }
    116. dfs(1 , 0);
    117. dfs2(1 , 0 , 0);
    118. for(int i = 0 ; i < m ; i ++){
    119. if(ans[i]){
    120. cout <<"YES\n";
    121. }
    122. else{
    123. cout <<"NO\n";
    124. }
    125. }
    126. init(n);
    127. cout << endl;
    128. num.clear();
    129. }
    130. int main()
    131. {
    132. ios::sync_with_stdio(false);
    133. cin.tie(0);
    134. cout.tie(0);
    135. cout.precision(10);
    136. int t=1;
    137. cin>>t;
    138. while(t--)
    139. {
    140. solve();
    141. }
    142. return 0;
    143. }

     

  • 相关阅读:
    美格智能5G模组SRM815助力新石器无人车火爆进博会
    【前端】前端CSS整理
    六要素一体微型气象站介绍
    【图像分类】2022-RepLKNet CVPR 31x31卷积了解一下
    深夜测评:讯飞星火大模型vs FuncGPT (慧函数),到底哪家强?
    基于FTP协议的文件上传与下载
    基于像素预测和位平面压缩的加密图像可逆数据隐藏附matlab代码(论文复现)
    计算机专业毕业设计项目推荐07-科研成果管理系统(JavaSpringBoot+Vue+Mysql)
    数据结构-链表(3)
    Java EE初阶---模板引擎
  • 原文地址:https://blog.csdn.net/weixin_61825750/article/details/134473287