首页 > 其他分享 >复旦勰码 3 月月赛 II & ZHYOI Round 4

复旦勰码 3 月月赛 II & ZHYOI Round 4

时间:2024-03-18 15:24:23浏览次数:14  
标签:复旦 ZHYOI luogu ll II Round

【LGR-179-Div.2】复旦勰码 3 月月赛 II & ZHYOI Round 4

\(T1\) luogu P10251 农场 \(100pts\)

  • 注意到未注明给的是哪两个对角顶点。

    • 赛时没注意到这一点,并因此吃了发罚时。
    点击查看代码
    int main()
    {
        ll n,x1,y1,x2,y2,xmax=-0x7f7f7f7f,xmin=0x7f7f7f7f,ymax=-0x7f7f7f7f,ymin=0x7f7f7f7f,i;
        cin>>n;
        for(i=1;i<=n;i++)
        {
            cin>>x1>>y1>>x2>>y2;
            xmax=max(xmax,max(x1,x2));
            ymax=max(ymax,max(y1,y2));
            xmin=min(xmin,min(x1,x2));
            ymin=min(ymin,min(y1,y2));
        }
        cout<<(xmax-xmin)*(ymax-ymin)<<endl;
        return 0;
    }
    

\(T2\) luogu P10252 线性变换 \(100pts\)

  • 觉得比较像 luogu P3306 [SDOI2013] 随机数生成器

  • 递推式为 \(x_{n}=ax_{n-1}-b\) 。

  • 当 \(a=0\) 时,递推式转化为 \(x_{n}=-b\) ,则经过操作能得到的 \(x\) 的最小值为 \(\min(x_{1},-b)=-b\) 。

  • 当 \(a \ne 0\) 时,

    • 当 \(b=0\) 时,有 \(ax_{1} \ge a\) ,则经过操作能得到的 \(x\) 的最小值为 \(x_{1}\) 。
    • 当 \(b \ne 0\) 时,
      • 当 \(a=1\) 时,递推式转化为 \(\begin{aligned} x_{n} &=x_{n-1}-b \\ &=x_{n-2}-2b \\ &=x_{n-3}-3b \\ &= \dots \\ &=x_{1}-(n-1)b \end{aligned}\) 。则经过操作能得到的 \(x\) 的最小值为 \(x_{1} \bmod b-b\) 。
      • 当 \(a \ne 1\) 时,有 \(\begin{aligned} x_{n+1}-x_{n}=ax_{n}-b-x_{n}=(a-1)x_{n}-b \end{aligned}\) ,其中 \((a-1)x_{n}-b\) 是呈指数级变化的,对于增长的直接特判即可,对于减少的直接暴力枚举即可。
    点击查看代码
    ll val(ll a,ll b,ll x)
    {
        return a*x-b;
    }
    int main()
    {
        ll t,x,a,b,i;
        cin>>t;
        for(i=1;i<=t;i++)
        {
            cin>>x>>a>>b;
            if(a==0)
            {
                cout<<-b<<endl;
            }
            else
            {
                if(b==0)
                {
                    cout<<x<<endl;
                }
                else
                {
                    if(a==1)
                    {
                        cout<<x%b-b<<endl;
                    }
                    else
                    {   
                        while(x>=0&&val(a,b,x)<x)
                        {
                            x=val(a,b,x);
                        }
                        cout<<x<<endl;
                    }
                }
            }
        }
        return 0;
    }
    

\(T3\) luogu P10253 说唱 \(25pts\)

  • 部分分
    • \(25pts\) :观察到 \(f(x)=\sum\limits_{i=0}^{\left\lfloor \log_{10}{x} \right\rfloor} \left\lfloor \dfrac{x}{10^i} \right\rfloor\) ,即若 \(f(x)=y\) ,则有 \(x \le y\) ,枚举即可。

      点击查看代码
      ll val(ll x)
      {
          ll n=log10(x)+1,sum=0,i;    
          for(i=1;i<=n;i++)
          {
              sum+=x;
              x/=10;
          }
          return sum;
      }
      int main()
      {
          ll t,x,y,i,ans;
          cin>>t;
          for(i=1;i<=t;i++)
          {
              cin>>y;
              ans=-1;
              for(x=0;x<=y;x++)
              {
                  if(val(x)==y)
                  {
                      if(ans==-1)
                      {
                          ans=x;
                      }
                      else
                      {
                          ans=-1;
                          break;
                      }
                  }
              }
              cout<<ans<<endl;
          }
          return 0;
      }
      
  • 正解

\(T4\) luogu P10254 口吃 \(10pts\)

  • 部分分
    • \(10pts\) :生成 \(1 \sim n\) 的全排列,计算其逆序对数求解。

      点击查看代码
      const ll p=998244353;
      ll a[1000],c[1000],d[1000];
      struct node
      {
          ll dis,vis;
      }b[1000];
      bool cmp(node x,node y)
      {
          return (x.dis==y.dis)?(x.vis<y.vis):(x.dis<y.dis);
      }
      ll lowbit(ll x)
      {
          return (x&(-x));
      } 
      ll getsum(ll x)
      {
          ll ans=0;
          for(ll i=x;i>=1;i-=lowbit(i))
          {
              ans+=c[i];
          }
          return ans;
      } 
      void add(ll n,ll x,ll key)
      {
          for(ll i=x;i<=n;i+=lowbit(i))
          {
              c[i]+=key;
          }
      } 
      int main()
      {
          ll n,k,sum=0,ans=0,i;
          cin>>n>>k;
          for(i=1;i<=n;i++)
          {
              a[i]=i;
          }
          do
          {
              sum=0;
              memset(c,0,sizeof(c));
              for(i=1;i<=n;i++)
              {
                  b[i].dis=a[i];
                  b[i].vis=i;
              }
              sort(b+1,b+1+n,cmp);
              for(i=1;i<=n;i++)
              {
                  d[b[i].vis]=i;
              }
              for(i=1;i<=n;i++)
              {
                  add(n,d[i],1);
                  sum+=(i-getsum(d[i]));
              }
              if(sum==k)
              {
                  for(i=1;i<=n;i++)
                  {
                      ans=(ans+i*a[i]%p)%p;
                  }
              }
          }while(next_permutation(a+1,a+1+n));
          cout<<ans<<endl;
          return 0;
      }
      

【LGR-179-Div.1】复旦勰码 3 月月赛 II & ZHYOI Round 4

\(T1\) luogu P10253 说唱 \(25pts\)

\(T2\) luogu P10254 口吃 \(10pts\)

\(T3\) luogu P10255 一首诗 \(0pts\)

\(T4\) luogu P10256 高仿的 Migos \(0pts\)

总结

  • luogu P10253 说唱
    • 赛时看见 \(y\) 极大,以为有纯数学解法,浪费了挺长时间。

标签:复旦,ZHYOI,luogu,ll,II,Round
From: https://www.cnblogs.com/The-Shadow-Dragon/p/18080473

相关文章

  • 群(II)
    陪集在Cayley定理的证明中,以及在证明对称群中奇置换与偶置换数量相等时,我们都用到了群的这样一个性质:如果以群\(G\)中的任意一个特定元素\(g\inG\)来产生一个映射\(G\toG:f(x)=g\circx\),则\(f\)一定是单射。这本质上缘于群具有“消去律”的性质。如果\(G\)是有限的,我们进一步......
  • Codeforces Round 933 G. Rudolf and Subway
    原题链接:Problem-G-Codeforces思路:根据题意可知相同颜色的边一定是联通的,那么就可以设置虚点,例如1-2,2-3,3-4边的颜色都是相同的,那么就可以设置一个特殊的点例如设置为10,那么这三条边就可以改成1-10,10-2,2-10,10-3,3-10,10-4,从点到虚点需要1的代价,但是从虚点到其他点不需要代价,......
  • 代码随想录算法训练营第四十八天 | 122.买卖股票的最佳时机II ,121. 买卖股票的最佳时
    122.买卖股票的最佳时机II 已解答中等 相关标签相关企业 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,......
  • cfRound933div3-E题解
    E-RudolfandkBridges题意:选择的桥在连续的行中,每个桥的支架安装位置是可以不一样的.做法:赛时也感觉也感觉是dp,但是害怕dp,就选择了逃避.往贪心方向想,认为每次到了每个跳板都要跳到最远距离,实际上这样是不行的.很明显,可能存在近一点的点花费更少。实际上是dp,而且也不......
  • Codeforces Round 933 Rudolf and k Bridges
    原题链接:Problem-E-Codeforces题目大意:给一个行为n列为m的河流二维数组,数字代表河流的深度。题目要求连续建造k座桥,桥的定义是从第一列到第m列,每隔d需要按照支架,安装支架的代价是深度+1。问安装最少需要多少代价?思路:单调队列优化dp,dp数组只需要一维,dp[i]的含义是从1到i建......
  • 63. 不同路径 IIc
    intuniquePathsWithObstacles(int**obstacleGrid,intobstacleGridSize,int*obstacleGridColSize){if(obstacleGridSize==0)return0;intm=obstacleGridSize,n=*obstacleGridColSize;int**dp=(int**)malloc(sizeof(int*)*m);for(inti=0;i<m;......
  • 第454题.四数相加II
    第454题.四数相加II力扣题目链接(opensnewwindow)给定四个包含整数的数组列表 A,B,C,D,计算有多少个元组(i,j,k,l) ,使得 A[i]+B[j]+C[k]+D[l]=0。为了使问题简单化,所有的A,B,C,D具有相同的长度 N,且0≤N≤500。所有整数的范围在-2^28......
  • Codeforces Round 934 (Div. 1)
    Preface真是一场酣畅淋漓的掉分啊,一场回到解放前了属于是这把虽然有不可抗力的原因(电脑半路蓝屏了),但不知道为什么状态就特别差A刚开始没清空干净WA了2发后就心态崩了,然后加上头疼难耐B题也没看出关键trick直接写了个不仅错还巨难写的东西不过yysy这场Guess的成分是否有点太高......
  • 每日一题 第七期 Codeforces Round 929 (Div. 3) Editorial
    TurtleTenacity:ContinualModsD.TurtleTenacity:ContinualModstimelimitpertest:2secondsmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputGivenanarraya......
  • Codeforces Round 934 (Div. 2)
    CodeforcesRound934(Div.2)A-DestroyingBridges解题思路:完全图每个点的连边数为\(n-1\)。\(k<n-1\):都可到达。\(k\geqn-1\):将点\(1\)的边删完,只能呆在点\(1\)。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=......