总结以评论形式发布

11 条评论

  • @ 2026-8-24 16:03:59

    Day 7 总结

    Part.1 赛时历程

    开赛时说非常简单,是 CSPJplusCSP-J plus 版,然后看了四道题,我并不认为这是 JJ 难度的。

    T1T1 直接读完题就不会了,然后先去看了一眼 T2T2,发现 T2T2 有点简单,就是找最大公因数的最大因子,然后思考到了一个 O(nA+nlogn)O(n \sqrt{A} + n\log{n}) 的写法,然后思考只要记录一下,就最多只会找 logA\log{A} 次,于是时间复杂度就降到了 O(nlogn+AlogAlnA)O(n\log{n} + \frac{\sqrt{A} \log{A}}{\ln{A}}),然后就写完了(8:30:358:30:35),然后发现没开 long longlong\ long,就顺手改了一下,挽救了我 50pts50 pts。(8:34:458:34:45)

    然后看 T3T3 感觉不是很会,于是观察 T4T4,打出了一个暴力,没看出什么规律,有返回到了 T1T1

    于是我开始仔细思考 T1T1,然后发现每次给新出现的涂色编号,如果重复了就涂上之间涂得颜色,能保证一定可以尽可能的保留最多的颜色。接下来就是经典的反着做,因为最后的会覆盖之间的,用一个后缀和数组判断一下,最后特判白色就过了。(9:27:139:27:13)

    写完 T1T1 后开始思考 T3T3,想到了只用消耗两次就一定可以到达相邻的点,但是没有想过可以这样建图跑 dijkstradijkstra 算法,然后又不知道什么原因,子任务 22 炸了。(10:02:2710:02:27)

    然后写了 2h2hT4T4,开始用各种方法找 T4T4 的规律。

    比如在 x+y=Cx + y = C 时,会出现周期为 2C2 ^ C 的循环节。然后其的分布呈现杨辉三角的规律,但是没法判定具体出现次序。次序出现有点像一些神秘编码,但是看半天没有看出来。

    思考了半天没拼出来答案,在 11:2011:20 左右开始思考研究部分分。

    subtask1subtask1 直接暴力即可。

    subtask2subtask2 只要求 x=0x = 0 时的答案,于是开始打表研究:

    1000000000
    1100000000
    1010000000
    1101000000
    1000100000
    1100010000
    1010001000
    1100000100
    1000000010
    1100000001
    1010000000
    1101000000
    1000000000
    1100000000
    1010000000
    1100000000
    1000000000
    1100000000
    1010000000
    1101000000
    1000100000
    1100000000
    1010000000
    1100000000
    1000000000
    1100000000
    1010000000
    1101000000
    1000000000
    1100000000
    1010000000
    1100000000
    1000000000
    1100000000
    1010000000
    1101000000
    1000100000
    1100010000
    1010000000
    1100000000
    1000000000
    1100000000
    1010000000
    1101000000
    1000000000
    1100000000
    1010000000
    1100000000
    1000000000
    1100000000
    1010000000
    

    可以观察到,在 t=y+k2yt = y + k * 2 ^ y 时为 11,即存在。

    subtask3subtask3 要就我们看 x<3,y<3x < 3,y < 3 时的状态,于是我们再次打表:

    0:100000000
    1:110000000
    2:101100000
    3:110010000
    4:100111000
    5:110000110
    6:101100011
    7:110011000
    8:100111001
    9:110000110
    10:101100001
    11:110010000
    12:100111000
    13:110000111
    14:101100010
    15:110011001
    16:100111000
    17:110000111
    18:101100000
    19:110010000
    20:100111000
    21:110000110
    22:101100011
    23:110011000
    24:100111001
    25:110000110
    26:101100001
    27:110010000
    28:100111000
    29:110000111
    30:101100010
    31:110011001
    32:100111000
    33:110000111
    

    可以观察到除了 t<2t < 2 时之外,后面都以 1616 为一个循环节,然后就打表做出。

    最后极限调完。(12:07:1312:07:13)

    Part.2 赛后反思

    估分 100+100+40+60=300100 + 100 + 40 + 60 = 300 实分 100+100+25+50=275100 + 100 + 25 + 50 = 275

    疑似数据点配制的有问题。

    还有就是居然没有想到 T3T3 的解法,疑似图论题做少了。

    没想过 T4T4 有那么直白的方法,想不出来,缺乏人类智慧导致的。

    Part.3 改进

    感觉做题做的有点少,想不到这些 trickstricks,还有就是经常会挂一些莫名其妙的分。

    • @ 2026-8-24 15:58:03

      今日总结:

      感觉不好,预计分数 100+60+0+0 ,实际分数 10+100+0+0;

      第一题,本以为能过得,但是在和 @Damon12 一起对拍 1 小时后发现我的代码有些地方变量用错了,好在已经过了。

      第二题,思路为对于一个 sgcd(x,y),要先求 gcd(x,y),然后在求 gcd 的最小质因子,最后用 gcd 除以这个质因子。最开始我的做法跑不了大样例,于是我就进行重构,但是我已经用了大部分时间,于是往后看了,也不知道为啥错了。

      第三题,思考了一会,发现我读错了题,重新读了下题,发现暴力太暴力了,而且已经要结束了,所以没写出来。

      第四题,读了下题,发现不会写,太麻烦了,于是就去看了第三题。

      • @ 2026-8-24 15:31:04

        (100+0+0+0) Problem one 30 min Problem two 30 min Problem three inf h Problem four infh 第三题暴力想了很久的IDA,A*,第四题脑子转不过来

        🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭🍭

        • @ 2026-8-24 15:22:51

          题目可以,只不过自己🍭了。

          还迟到了二十分钟...

          对于 A\text{A} 题,看了五分钟题花十分钟写了个纯暴力,过了小样例。因为时间复杂度 O(n2logn)O\left(n^2\log n\right) 巨高,所以我没有跑大样例,自认为至少也得有点暴力分。测下来,加强数据前是 55 分,加强数据后 00 分。

          然后看去 B\text{B},理解完题意后我想到一个比较🍭的做法:取完 gcd\gcd 后对其进行判断,若为偶则输出其除以二,若为奇则是倒着枚举的所有奇数进行判断。由于脑子里面不知道在想什么,没有想到正解。我跑了大样例,为正确就交了。其实枚举那一步已经 T 飞了,导致数据加强前 6060 分,加强后 00 分。其实只需要在 gcd\gcd 后找最小的质因子,然后计算一下就行了。

          09:41 的时候开始看 C\text{C} 题。看完题我就觉得我不可做,就开始想着怎么拿点部分分。我的🍭🍭🍭做法就是:一直跑 dfs\text{dfs},对每次答案取 min\min。其实这是正确的暴力,跟陈嵩的的写法是一样的,但是写的时候脑子又抽了,总结为各种奇奇怪怪的小问题导致的代码跑出来全是 00。又决定重新写,又想不到什么能拿分的办法,甚至想用随机化。最后呈现出来的代码就是这只输出 -1 的 🍭

          展示智商:

          void solve(){
              cin>>r>>c;
              for(int i=1;i<=r;i++)for(int j=1;j<=c;j++)cin>>mp[i][j];
              cin>>bx>>by>>ex>>ey;
              cout<<-1<<'\n';
          }
          

          最后的 D\text{D} 题,我认为没有 C\text{C} 那么难 至少可以想想。最基础的对题意进行模拟,把每一“秒”输出出来寻找规律。我就开始模拟题意,调了 2020 分钟把一些小问题解决了然后找。可惜没有想到任何与正解有关的思路就看了一眼暴力时间复杂度,也是特别高。结束后发现对时间进行排序就可以减少一点时间复杂度。哎,这都没想到,🍭了🍭了。

          总结就是时间分配出了点问题。因为迟到的原因让我想得比较急,前两题写得太快了,后两题又思考不出来导致数据加强后爆 00。还有就是没吃过大样例跑过不等于代码正确的亏,自信认为写的很正确结果错完。

          以后应把该拿的分有把握得拿到手后再去花时间思考后面的题。

          🤣 1
          • @ 2026-8-24 15:15:30

            开赛听巧可拉说这把纯水,然后开始品鉴。。。

            我靠这个 A 难完了啊,读完题之后想了 eps seconds 就去看 B 了。

            读完之后就是纯水题啊,但是想了一会并没有想到正解,遂写 O(nn)O(n \sqrt n) 做法,然后一写完秒想到正解,然后写了 O(n(d((a1)+loga1)))O(n(d((a_1)+\log a_1))) 的 100pts 做法。

            回头看 A,又想了 +inf 单位时间,写了若干份自己清楚知道是错误的代码,其中更是有没过样例但是 AC 的,但是巧可拉加强之后就 only 10pts 了,反正也没想出一个正解。

            然后看 C,完全知道难点全在图论建模上,想了会没想到做法,然后去看 D,感觉 D 是个找规律题,小找一下感觉难完了又回去看 C,对题意产生了一点疑问,然后去答疑,发现少读了一点细节,然后罚坐虚度若干光阴,最终写了个 BFS 暴力。

            然后又回去看 A,直到比赛最后 30min 我终于写了一个全过样例且感觉较为对的代码,然后 D 至少要交一发吧,然后写了个随机(

            A B C D Total
            估分 0 100 25 0 125
            实际 100 40 240
            理想 100 20 320

            A:诶原来我写的是正解吗。

            C:我估分好像想错了诶,我时间复杂度好像是跟答案大小有问题,并不跟 n,mn,m 有直接关系,所以应该就是 40pts。然后我结构化绑定只给我报了个 warning 捏。

            没啥问题吧,感觉 C 再想个 +inf minutes 说不定可以想出了嘞。

            • @ 2026-8-24 14:57:24

              区曲驱屈蛆

              估分:100+100+25+20 = 245

              结局:70+50+40+20 = 180

              最恼火的一集

              T1

              哇塞T1最开始一看题就有点骇死我了,想了半天写了一个我自认为挺对的东西,结果没过样例。

              (身边好多人都飞快地通过T1+黄邦迅一直说T2纯简单题)

              形势所迫,放弃T1去写T2了,写完T2再回来一看,光然大悟。

              写了一个通过样例的代码,直接一个提交!!!!

              然而好像太激动了,在判断空格(没有被染色的格子的时候)使用了如下完全遍历整张图的代码:

              for(int i=1;i<=n;i++){
                  for(int j=1;j<=m;j++){
                      if(cntx[i]==0&&cnty[j]==0){
                          cnt++;
                          cout<<cnt<<'\n';
                          return 0;
                      }
                  }
              }
              

              于是时间方面倒显得比较短缺了,最终得到了70pts的好成绩。

              T2

              困难弯了,想半天(加上T1想了一天了)想出来一个 O(O( 因数个数2^2 )) 时间复杂度的做法。

              一跑样例,发现跑得飞快,索性不管了,直接进行了一个提交的动作。

              最终貌似是map太慢了,T了一个点,太可惜了(赛后发现用unorded_map就能过x_X)。

              T3

              太困难了,没想到做法,今天太蛆了,写个dfs--期望得分25pts。

              没想到数据水水,得了40pts,不幸中的万幸了也是。

              T4

              太困难了,打了暴力,打表盯着看了好一会,什么都看不出来。

              就这样吧。

              既然这么早下班,快来跟我一起锻炼身体!

              忠诚不是盲目服从,正义没有服务对象。

              要以音为乐,才叫作音乐。

              • @ 2026-8-24 14:48:11

                T1

                想了一会就想出来了

                但是刚起床没什么记忆力

                代码写的和刚想的不一样

                多调了一会


                T2

                写了根号的

                刚起床没手感

                我以为时间复杂度瓶颈在对每个数的因数大小排序

                没看到有个根号

                把排序优化了

                结果还是跑的奇慢无比

                这才意识到原来有个根号

                然后改对了


                T3

                不会

                写了暴力

                以为数据很牛逼

                第二个子任务肯定会被卡

                只让跑了第一个子任务就不跑了

                哪知道数据这么傻逼

                尽然能让暴力过

                可以获得40分


                T4

                写了20分

                发现了特殊点的规律

                最后一分钟写出来30分

                但是没时间检查

                数组开小了

                痛失10分

                • @ 2026-8-24 14:39:34

                  估分/实际:100+100+15+20

                  T1写很快。T2我担心会错,想了一会,幸好过了。。T3只特判了15分,BFS不会处理变成冰的点,不想写DFS了,可以改进。T4暴力。

                  下次可以多耐心写点暴力。。

                  • @ 2026-8-24 14:35:22

                    前言 “💼💼🐘”

                    总结

                    真🍭题

                    一眼秒。简单的真🍭🍭🍭题!!!

                    麦芽🍭题

                    一眼秒。简单的麦芽🍭🍭🍭题!!!

                    🍭🍭🍭题

                    有点像之前做过的题,但有点区别。想了十多分钟没想出建图,以为不是建图题,也没什么新思路,已🍭完!

                    🍭🍭🍭🍭题

                    没什么思路,还把暴力打挂了。总结trick很高级。

                    得分:100+100+15+0

                    评价:思路堵塞
                    餹粉:果🍭
                    • @ 2026-8-24 14:31:41

                      (10+0+100+0)

                      Problem one 15 min 写了

                      
                      #include<bits/stdc++.h>
                      using namespace std;
                      #define int long long
                      #define f(i,a,b) for(int i=a;i<=b;i++)
                      #define rep(i,a,b) for(int i=a;i>=b;i--)
                      #define pii pair<int,int>
                      #define se second
                      #define fi first
                      const int N=2000+2,M=2e5+6;
                      signed main(){
                          ios::sync_with_stdio(false),cin.tie(0);
                          int n,m,k,q;cin>>n>>m>>k>>q;
                          set<int> st,st1;
                          while(q--){
                              int op;cin>>op;
                              if(op==0){int x;cin>>x;st.insert(x);}
                              if(op==1){int x;cin>>x;st1.insert(x);}
                          }int ans=st.size()+st1.size();
                          if(st.size()==n||st1.size()==m)ans=ans;
                          else ans++;
                          cout<<min(ans,k);
                          return 0;
                      }
                      

                      改成

                      
                      #include<bits/stdc++.h>
                      using namespace std;
                      #define int long long
                      #define f(i,a,b) for(int i=a;i<=b;i++)
                      #define rep(i,a,b) for(int i=a;i>=b;i--)
                      #define pii pair<int,int>
                      #define se second
                      #define fi first
                      const int N=3e5+2,M=2e5+6;
                      int op[N],id[N];
                      int x[N],y[N];
                      signed main(){
                          ios::sync_with_stdio(false),cin.tie(0);
                          int n,m,k,q;cin>>n>>m>>k>>q;
                          f(i,1,q)cin>>op[i]>>id[i];
                          int ans=0,an1=0,an2=0;
                          rep(i,q,1){
                              if(op[i]==1){
                                  if(x[id[i]]==0){
                                      x[id[i]]=1;
                                      ans++;an1++;
                                  }
                              }else{
                                  if(y[id[i]]==0){
                                      y[id[i]]=1;
                                      ans++;an2++;
                                  }
                              }if(an1==m){
                                  ans--;break;
                              }if(an2==n){
                                  ans--;break;
                              }
                          }ans++;cout<<min(ans,k);
                          return 0;
                      }
                      
                      

                      可以过了 场上快速过了样例和大样例就交了 代码本来得了100分但是被老师卡了, Problem two 10 min

                      #include<bits/stdc++.h>
                      using namespace std;
                      #define int long long
                      #define f(i,a,b) for(int i=a;i<=b;i++)
                      #define rep(i,a,b) for(int i=a;i>=b;i--)
                      #define pii pair<int,int>
                      #define se second
                      #define fi first
                      const int N=1e6+10,M=2e5+6;
                      int a[N];int cnt,idx;
                      int pr[N];
                      int prim[N];
                      int vis[N];
                      signed main(){
                          ios::sync_with_stdio(false),cin.tie(0);
                          f(i,2,N-2){
                              if(vis[i]==0){
                                  prim[++idx]=i;
                                  for(int j=i+i;j<=N-2;j+=i){vis[j]=1;}
                              }
                          }
                          int n;cin>>n;f(i,1,n)cin>>a[i];
                          for(int i=1;prim[i]*prim[i]<=a[1]&&i<=idx;i++){
                              if(a[1]%prim[i]==0){pr[++cnt]=prim[i];}
                          }//cout<<cnt<<"\n";
                          f(i,1,n){
                              int num=__gcd(a[1],a[i]);
                              int ans=-1;
                              f(j,1,cnt){
                                  if(num%pr[j]==0){
                                      ans=num/pr[j];break;
                                  }
                              }cout<<ans<<" ";
                          }
                          return 0;
                      }
                      
                      #include<bits/stdc++.h>
                      using namespace std;
                      #define int long long
                      #define f(i,a,b) for(int i=a;i<=b;i++)
                      #define rep(i,a,b) for(int i=a;i>=b;i--)
                      #define pii pair<int,int>
                      #define se second
                      #define fi first
                      const int N=1e6+10,M=2e5+6;
                      int a[N];int cnt,idx;
                      int pr[N];
                      int prim[N];
                      int vis[N];
                      signed main(){
                          ios::sync_with_stdio(false),cin.tie(0);
                          f(i,2,N-2){
                              if(vis[i]==0){
                                  prim[++idx]=i;
                                  for(int j=i+i;j<=N-2;j+=i){vis[j]=1;}
                              }
                          }
                          int n;cin>>n;f(i,1,n)cin>>a[i];
                          int num=a[1];
                          for(int i=1;prim[i]*prim[i]<=a[1]&&i<=idx;i++){
                              if(num%prim[i]==0){pr[++cnt]=prim[i];
                                  while(num%prim[i]==0)num/=prim[i];
                              }
                          }if(num!=1)pr[++cnt]=num;
                          f(i,1,n){
                              int num=__gcd(a[1],a[i]);
                              int ans=-1;
                              f(j,1,cnt){
                                  if(num%pr[j]==0){
                                      ans=num/pr[j];break;
                                  }
                              }cout<<ans<<" ";
                          }
                          return 0;
                      }
                      
                      

                      就过了

                      过了大样例但是没有特殊考虑a1是质数的情况本来有90分但是应为捆绑被卡了只有0分

                      Problem three 35 min 快速会了写了

                      #include<bits/stdc++.h>
                      using namespace std;
                      #define int long long
                      #define f(i,a,b) for(int i=a;i<=b;i++)
                      #define rep(i,a,b) for(int i=a;i>=b;i--)
                      #define pii pair<int,int>
                      #define se second
                      #define fi first
                      const int N=1e3+10,M=1e6+6;
                      char  a[N][N];
                      vector<pii> g[M];int n,m;
                      int to(int i,int j){return (i-1)*m+j;}
                      int dis[M];
                      int vis[M];
                      signed main(){
                          ios::sync_with_stdio(false),cin.tie(0);
                          cin>>n>>m;
                          f(i,1,n)f(j,1,m)cin>>a[i][j];
                          int sx,sy,tx,ty;cin>>sx>>sy>>tx>>ty;
                          f(i,1,n){
                              int lst=1;
                              f(j,2,m){
                                  if(a[i][j]=='#'){
                                      lst=j;
                                  }else{
                                      g[to(i,j)].push_back({to(i,lst+1),1});
                                      //cout<<i<<" "<<j<<" "<<i<<" "<<lst+1<<"\n";
                                  }
                              }lst=m;
                              rep(j,m-1,2){
                                  if(a[i][j]=='#'){
                                      lst=j;
                                  }else{
                                      g[to(i,j)].push_back({to(i,lst-1),1});
                                      //cout<<i<<" "<<j<<" "<<i<<" "<<lst+1<<"\n";
                                  }
                              }
                          }f(i,1,m){
                              int lst=1;
                              f(j,2,n){
                                  if(a[j][i]=='#'){
                                      lst=j;
                                  }else{
                                      g[to(j,i)].push_back({to(lst+1,i),1});
                                  }
                              }lst=n;
                              rep(j,n-1,2){
                                  if(a[j][i]=='#'){
                                      lst=j;
                                  }else{
                                      g[to(j,i)].push_back({to(lst-1,i),1});
                                  }
                              }
                          }f(i,1,n)f(j,1,m){
                              if(a[i][j]=='.'&&a[i][j+1]=='.'){
                                  g[to(i,j)].push_back({to(i,j+1),2});
                                  g[to(i,j+1)].push_back({to(i,j),2});
                                  //cout<<i<<" "<<j<<" "<<i<<" "<<j+1<<"\n";
                              }if(a[i][j]=='.'&&a[i+1][j]=='.'){
                                  g[to(i,j)].push_back({to(i+1,j),2});
                                  g[to(i+1,j)].push_back({to(i,j),2});
                              }
                          }f(i,1,n*m)dis[i]=1e18;dis[to(sx,sy)]=0;
                          priority_queue<pii,vector<pii>,greater<pii>> q;
                          q.push({0,to(sx,sy)});
                          while(!q.empty()){
                              int x=q.top().se;q.pop();
                              if(vis[x]==1)continue;vis[x]=1;
                              for(pii u:g[x]){
                                  if(dis[u.fi]>dis[x]+u.se){
                                      dis[u.fi]=dis[x]+u.se;q.push({dis[u.fi],u.fi});
                                  }
                              }
                          }
                          if(dis[to(tx,ty)]==1e18)cout<<-1;
                          else cout<<dis[to(tx,ty)];
                          return 0;
                      }
                      

                      最后通过了大样例得到了100分 Problem four 3h 打标观察了恒久,发现没有任何规律只写了20分暴力但是挂了

                      #include<bits/stdc++.h>
                      using namespace std;
                      #define int long long
                      #define f(i,a,b) for(int i=a;i<=b;i++)
                      #define rep(i,a,b) for(int i=a;i>=b;i--)
                      #define pii pair<int,int>
                      #define se second
                      #define fi first
                      #define arr3 array<int,3>
                      const int N=1e3+10,M=1e6+6;
                      vector<arr3> g[N];
                      int ans[N];
                      int a[N][N];
                      int tep[N][N];
                      int now[N][N];
                      signed main(){
                          ios::sync_with_stdio(false),cin.tie(0);
                          int q;cin>>q;
                          f(i,1,q){
                              int t,x,y;cin>>t>>x>>y;x++;y++;
                              arr3 tep;tep[0]=x;tep[1]=y;tep[2]=i;
                              g[t].push_back(tep);
                              //g[]
                          }int n=120;f(t,0,1000){
                              f(i,1,n)f(j,1,n)tep[i][j]=a[i][j];
                              f(i,1,n)f(j,1,n)a[i][j]=0;
                              a[1][1]=1;
                              f(i,1,n)f(j,1,n){
                                  if(now[i][j]==0)a[i][j+1]=tep[i][j];
                                  else a[i+1][j]=tep[i][j];
                              }f(i,1,n)f(j,1,n)if(tep[i][j]==1)now[i][j]=1-now[i][j];
                              for(arr3 x:g[t]){
                                  ans[x[2]]=a[x[0]][x[1]];
                                  //cout<<x[0]<<" "<<x[1]<<"\n";
                              }
                              // cout<<t<<"\n";
                              // f(i,1,n){
                              //     f(j,1,n){
                              //         cout<<a[i][j];
                              //     }cout<<"\n";
                              // }cout<<"\n";
                          }f(i,1,q)cout<<((ans[i]==1)?"YES":"NO")<<"\n";
                          return 0;
                      }
                      
                      
                      #include<bits/stdc++.h>
                      using namespace std;
                      #define int long long
                      #define f(i,a,b) for(int i=a;i<=b;i++)
                      #define rep(i,a,b) for(int i=a;i>=b;i--)
                      #define pii pair<int,int>
                      #define se second
                      #define fi first
                      const int N=120+2,M=2e5+6;
                      int op[N],id[N];
                      int x[N],y[N];
                      int dp[N][N],dp1[N][N];
                      signed main(){
                          ios::sync_with_stdio(false),cin.tie(0);
                          int q;cin>>q;
                          while(q--){
                              int t,x,y;cin>>t>>x>>y;//x++;y++;
                              f(i,0,x)f(j,0,y)dp[i][j]=0,dp1[i][j]=0;
                              dp[0][0]=t-x-y+1;dp1[0][0]=t-x-y;
                              f(i,0,x)f(j,0,y){
                                  dp[i+1][j]+=dp[i][j]/2;
                                  dp[i][j+1]+=(dp[i][j]+1)/2;
                                  dp1[i+1][j]+=dp1[i][j]/2;
                                  dp1[i][j+1]+=(dp1[i][j]+1)/2;
                              }if(dp[x][y]==dp1[x][y])cout<<"NO\n";
                              else cout<<"YES\n";
                          }
                          return 0;
                      }
                      
                      

                      第四题脑子转不过来

                      • @ 2026-8-24 14:26:36

                        (100+100+100+20)
                        Problem one 30 min
                        Problem two 30 min
                        Problem three 1 h
                        Problem four 2h
                        第四题脑子转不过来

                        • 1