当前位置: 首页 > article >正文

【LGR-179-Div.2】复旦勰码 3 月月赛 II ZHYOI Round 4(A~B)

T431492 农场

有n个农场,告诉你农场的对角顶点坐标,农场都是矩阵。

要找出一个最大的矩阵(平行于x和y轴)把所有农场都圈起来。

那就保证最下面的点和最上面的点,最左边的点,最右边的点都能被圈到。

用l,r,u,d,来表示四个方向能衍生的最长距离,答案就是(r-l)*(u-d)

#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
#define endl '\n'
using namespace std;
using ll=long long;

void solve(){
    int n;
    cin>>n;

    int l,r,u,d;
    cin>>l>>u>>r>>d;
    if(r<l)swap(l,r);
    if(u<d)swap(u,d);

    per(i,1,n-1){
        per(j,1,2){
            int x,y;
            cin>>x>>y;

            l=min(l,x);
            r=max(r,x);
            u=max(u,y);
            d=min(d,y);
        }
    }

    cout<<(r-l)*(u-d);
}

signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int t=1;
    while(t--)solve();
    return 0;
}

T431493 线性变换

可以对x进行操作(x>=0时才能操作),x=ax-b,进行0次及以上操作,问x的最小值。

分类讨论:

当a=0,x=-b,答案在 x 和 -b 中选一个最小的。

当a=1,x=x-b,每次操作取决于b。

          若b>0,则x可以变小,且b的整数倍次会减掉,即x-=(x/b)*b,然后再减一次b让x<0即可。

          若b<=0,x不会变得更小。

当a=-1,x=-x-b,x = -(-x-b)-b = x,答案在 x 和 -x-b 中选一个最小的               

考虑是否有先变大再变小的情况,只能由a变换符号得到,只有负数才能变成正数,再变成负数。

而负数不可以执行操作,故操作之后值变大就可以停止循环。       

|a|>=2时,显然会给 x 带来指数级的变化,每次都 *2*2*2 很快就会运算结束,暴力穷举1000次。 

#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
#define endl '\n'
using namespace std;
using ll=long long;

void solve(){
    int x,a,b;
    cin>>x>>a>>b;

    if(a==0){
        cout<<min(x,-b)<<endl;
    }else if(a==1){
        if(b<=0){
            cout<<x<<endl;
        }else{
            x-=(x/b)*b;
            while(x>=0)x-=b;
            cout<<x<<endl;
        }
    }else if(a==-1){
        cout<<min(x,-x-b)<<endl;
    }else{
        int ans=x;
        per(i,1,1000){
            x=a*x-b;
            if(x>=ans)break;
            ans=x;
            if(ans<0)break;
        }
        cout<<ans<<endl;
    }
}

signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int t=1;
    cin>>t;
    while(t--)solve();
    return 0;
}


http://www.kler.cn/a/271764.html

相关文章:

  • Golang笔记——常用库context和runtime
  • 网站如何正式上线(运维详解)
  • 【信息系统项目管理师-选择真题】2007下半年综合知识答案和详解
  • 使用 KNN 搜索和 CLIP 嵌入构建多模态图像检索系统
  • 哈工大:LLM高质量嵌入模型KaLM-Embedding
  • C#面试常考随笔6:ArrayList和 List的主要区别?
  • [MySQL]数据库基础
  • Peter算法小课堂—最大边最短路
  • JDK、JRE和JVM的区别
  • el-table左键双击单元格编辑内容(输入框输入计算公式可直接得出结果),右键单击展示操作菜单,可编辑单元格高亮展示
  • 电脑充电器能充手机吗?如何给手机充电?
  • EKF+PF的MATLAB例程
  • CSS Module
  • 聊聊Python都能做些什么
  • 应对磁盘管理挑战:Linux磁盘分区挂载命令实践指南
  • Linux系统之部署Hextris网页小游戏
  • 使用 Docker Compose 快速搭建监控网站 uptime-kuma
  • 【网络编程基础(一)】网络基础和SOCKET
  • 代码规范工具
  • Rust学习02:推荐一本入门书,免费的
  • 封装哈希表
  • MySQL之旅
  • jeecg 启动 微服务 更改配置本地host地址
  • 使用公式在Excel中指定列值的变化实现自动间隔着色(不是按照固定的行数)
  • SpringMVC拦截器的作用及使用方法
  • 【蓝桥杯选拔赛真题66】python字符串后两个字符 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析