• 8.14题解


    T1

    大水题一道,然而我死活没想到,维护了很多没有用的东西,其实离正解不太远,但就是想不到,我是折叠之后修正了每个点所在的位置,但是事实上只有后面的翻折点更新他的位置才有意义,所以只需要更新后面没用到的点的新位置即可

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #define maxn 3010
     5 #define int long long
     6 using namespace std;
     7 int n,m,l,r;
     8 int d[maxn];
     9 signed main()
    10 {
    11     //freopen("1.in","r",stdin);
    12     //freopen("1W.out","w",stdout);
    13     scanf("%lld%lld",&n,&m);  l=0;  r=n;
    14     for(int i=1;i<=m;++i)  scanf("%lld",&d[i]);
    15     for(int i=1;i<=m;++i)
    16     {
    17         int len1=d[i]-l,len2=r-d[i];
    18         if(len1>=len2)
    19         {
    20             for(int j=i+1;j<=m;++j)
    21             if(d[j]>=d[i]&&d[j]<=r)  d[j]=2*d[i]-d[j];
    22             r=d[i];
    23         }
    24         else
    25         {
    26             for(int j=i+1;j<=m;++j)
    27             if(d[j]>=l&&d[j]<=d[i])  d[j]=2*d[i]-d[j];
    28             l=d[i];
    29         }
    30     }
    31     printf("%lld
    ",r-l);
    32     return 0;
    33 }
    View Code

    T2

    考场$exgcd$打挂了,记了一个假的板子,当然,事实上$exgcd$我是学一次忘一次,非常尴尬,当然考场上没有暴力枚举很可惜,以为自己的$exgcd$是对的,这没办法,接下来上正解,前方数学题,请自备纸笔

    首先对于原式子${L}leq{S*x{\%}M}leq{R}$,我们可以想到如果不取模,也就是找的$S$的某个倍数符合条件,那么此时的$x$一定就是所求的最小正整数解,接下来我们考虑需要取模的情况,接下来是式子的化减及变形

      ${L}leq{S*x{\%}M}leq{R}$

    $Leftrightarrow$${L}leq{S*x-M*y}leq{R}$

    $Leftrightarrow$${-R}leq{M*y-S*x}leq{-L}$

    $Leftrightarrow$${-R{\%}S}leq{M*y{\%}S}leq{-L{\%}S}$

    到此,这个式子又回到了最初的样子,那么我们像$exgcd$那样,打一个函数,不停的调用,就相当于我们是在不停的缩小问题规模,那么可以求解的边界就是出现了不需要${\%}S$的答案,那么此时的$y={lceil}frac{-R}{M}{ ceil}$,当然了此时的$-R$应该已经在取模意义下变为了正数,那再把$y$带回原式子,如果它满足${leq}{-L}$就是一个合法解,否则继续递归下去,那么假设我们现在已经得到了一个合法的$y$,接下来就是通过$y$求解$x$,仿照$y$的求解过程,我们可以得到$x={lceil}frac{L+M*y}{S}{ ceil}$,依旧带回判断是否成立,即可得到最后的答案

     1 #include<iostream>
     2 #include<cstdio>
     3 #define int long long
     4 using namespace std;
     5 int t;
     6 int maths(int l,int r,int mod1,int mod2)
     7 {
     8     if(l>mod2||l>r)  return -1;
     9     int x=(l-1)/mod1+1;
    10     if(x*mod1<=r)  return x;
    11     int y=maths(((-r%mod1)+mod1)%mod1,((-l%mod1)+mod1)%mod1,mod2%mod1,mod1);
    12     if(y==-1)  return -1;
    13     int ls=l+mod2*y-1;  x=ls/mod1+1;
    14     if(x*mod1-mod2*y<=r)  return x;
    15     return -1;
    16 }
    17 main()
    18 {
    19     scanf("%lld",&t);
    20     while(t--)
    21     {
    22         int M,S,L,R;  scanf("%lld%lld%lld%lld",&M,&S,&L,&R);
    23         int ans=maths(L,min(R,M-1),S,M);  printf("%lld
    ",ans);
    24     }
    25     return 0;
    26 }
    View Code

    T3

    恶心人的类似数位DP的东西,依旧是鸽了

  • 相关阅读:
    简单实现MySQL数据库的日志审计
    利用Impdp+Network将Oracle 11g数据迁移到Oracle 19c
    Oracle Orion tool check IO(Oracle Orion工具查看及校验IO)
    Oracle exp(expdp)数据迁移(生产环境,进行数据对以及统计信息的收集)
    OEM 12C(12.1.0.5)安装插件Plug-in监控MySQL(Linux)
    马斯洛需求层次理论
    完成一条指令的三个阶段
    Render
    JXP
    DOM
  • 原文地址:https://www.cnblogs.com/hzjuruo/p/11366073.html
Copyright © 2020-2023  润新知