热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AIMTechRound51028cf(A-E)

AIMTechRound5(codeforces上题目编号是1028)(A-E)---完全被这次比赛打击,自己真的很渣---战况依旧3题选手被构造题坑得好惨稍稍涨

AIM Tech Round 5 (codeforces上题目编号是1028)(A-E)

---完全被这次比赛打击,自己真的很渣---

战况

  • 依旧3题选手
  • 被构造题坑得好惨
  • 稍稍涨了rating,希望下次比赛好好准备进入蓝名,就可以被div1虐了
  • 题目看题解也很难懂呀

    A. Find Square

  • 水题,找出矩形得中心,可以略过

    B. Unnatural Conditions

    题意:

  • s(A)代表数字A各个数位之和即s(1234)=1+2+3+4=10
  • 给出 m,n,需要求出满足条件A,B;s(A)>=m,s(B)>=m,s(A+B)<=n
  • 自己也是想了一会才知道是构造题目(毕竟没经验),但我一直蜜汁自信构造这s(A)=m,s(B)=m但min(s(A+B))的情况
  • 实际上s(A),s(B)的大小和s(A+B)完全没有相关性,s(A),s(B)都可以无限大,s(A+B)最小可以是1
  • so 就是这样呀:
  • A=55555555555555555555555555555555555
  • B=44444444444444444444444444444444445
  • 这样一想已变成水题(连读入都不需要读了),代码略

    C. Rectangles

    题意

  • 给k个矩形,找出任意(k-1)个矩形相交区域的点(即相交区域任一点即可)
  • 程序的判定大概是这样应该是算出所有(k-1)个相较矩形的并,然后判定我们输出的点是否在这些区域内
  • 我的做法不同于标程,我是按照之前比赛的求线段(k-1)交的题目方法做的
  • 将其看作两维情况,同时抽掉一个矩形,观察影响x轴线段并和y轴线段并,如果还有区间,输出即可
  • 我的程序时间复杂度是O(nlogn)(需要排序),但其实可以优化因为只需有的最小值,次小值,最大值和次大值,这样就是O(n)
  • 标答的做法是采用前缀最大预处理前缀最大并区域和后缀最大并区域(真的是很聪明的方法)
  • 这里只给出我的做法

    代码

#include
using namespace std;
const int maxn=140000;
int xl[maxn];
int xr[maxn],yd[maxn],yu[maxn];
int tmpx1[maxn],tmpx2[maxn],tmpy1[maxn],tmpy2[maxn];
bool help(int x,int y,int x1,int x2,int y1,int y2){
    return (x>=x1&&x<=x2)&&(y>=y1&&y<=y2);
}
int main(){
    int x1,y1,x2,y3;
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        scanf("%d %d %d %d",&xl[i],&yd[i],&xr[i],&yu[i]);
        tmpx1[i]=xl[i];tmpx2[i]=xr[i];tmpy1[i]=yd[i];tmpy2[i]=yu[i];
    }
    //printf("db raed over\n");
    sort(xl+1,xl+1+n);
    sort(xr+1,xr+1+n);
    int tl=xl[n],tr=xr[1];
     sort(yd+1,yd+1+n);
    sort(yu+1,yu+1+n);
    int td=yd[n],tu=yu[1];
    for(int i=1;i<=n;i++){
        int tl=xl[n],tr=xr[1];
        int td=yd[n],tu=yu[1];
        //printf("db1:%d %d %d %d %d\n",i,tl,tr,td,tu);
        if(tmpx1[i]==xl[n]) tl=xl[n-1];
        if(tmpx2[i]==xr[1]) tr=xr[2];
        if(tmpy1[i]==yd[n]) td=yd[n-1];
        if(tmpy2[i]==yu[1]) tu=yu[2];
        //printf("db2:%d %d %d %d %d\n",i,tl,tr,td,tu);
        if(tr>=tl&&tu>=td){
            //printf("db:%d %d %d %d %d\n",i,tl,tr,td,tu);
            printf("%d %d\n",tl,td);
    return 0;
        }
    }
    return 0;
}

D. Order book

题意

  • 个人感觉题目真的很毒瘤,题意很长而且难懂,所以比赛时果断放弃
  • 一个本本里记录着 sell mi;buy ni 这样两种形式的内容;每次达成一次交易是min(mi) max(ni),然后删除这样两项
  • 现在给出add m;accept n;表示加入某项(并不知是sell or buy),accept n 代表一次交易(可能是buy n也可能是sell n)
  • 现在求有多少可能情况(很毒瘤吧)
  • 可以分析每次accept就能确定很多情况,所以维护min(sell)和max(buy)
  • 如果在max(buy)-min(sell)区间内则情况数翻倍,并且更新min(sell) max(buy) 删除accept的元素
  • 最终剩下的Min(sell) max(buy)的区间长度就是情况数另一个因子(可以枚举sell的位置,比sell大的都是sell)

    代码如下

#include
using namespace std;
#define ll long long
int n;
ll modv=1e9+7;
ll p;
char str[10];
set s;
ll lo=-1e9,hi=1e9;
ll ans=1;
int main(){
    scanf("%lld",&n);
    s.insert(lo);s.insert(hi);
    for(ll i=1;i<=n;i++){
        scanf("%s %lld",str,&p);
        if(str[1]=='D'){
            s.insert(p);
        }
        else{
            if(phi){printf("0\n");return 0;}
            if(p>lo&&p

E. Restore Array(毒瘤构造题,不过很多人都构造出来了,是我太渣,还是自己见识太少)

题意

  • 数组 a[n]是由b[n] 通过a[i]=b[i]%bi+1得到的
  • 试根据a[n]求得b[n]
  • 构造题,没有唯一解,需判定解的存在性;大概思想是根据差项得到a[i],所以b[i]是某种形式的前缀和或者后缀和(注意足够大)
  • 作为基准(起点)的应该是a[i]==max&&a[i]>a[i-1]

    代码

#include
using namespace std;
#define ll long long
const ll N=200005;
ll a[N];
ll b[N];
int mod(int a,int p){
    if(a%p==0) return p;
    else return a%p;
}
int main(){
    ll n;
    cin>>n;
    ll minv=INT_MAX,maxv=INT_MIN;
    for(ll i=1;i<=n;i++){
        scanf("%d",a+i);
        minv=min(a[i],minv);
        maxv=max(a[i],maxv);
    }
    if(minv==maxv){
        //maybe No
        if(minv==0){
            //construct same
            printf("Yes\n");
            for(int i=1;i<=n;i++){
                printf("%lld ",(ll)1);
            }
        }
        else{
            printf("No\n");
        }
    }
    else{
        int maxindex=-1;
        a[0]=a[n];
        for(ll i=1;i<=n;i++){
            if(a[i]==maxv&&a[i-1]=1;i--){
            //b[(i+maxindex)%n]=b[(i+1+maxindex)%n]+a[(i+maxindex)%n];
            b[mod(i+maxindex,n)]=b[mod(i+1+maxindex,n)]+a[mod(i+maxindex,n)];
        }
        printf("Yes\n");
        for(int i=1;i<=n;i++){
            printf("%lld ",b[i]);
        }

    }
    return 0;
}

求下一次蓝名啊,我要打div1!!!!


推荐阅读
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文介绍了C++中的引用运算符及其应用。引用运算符是一种将变量定义为另一个变量的引用变量的方式,在改变其中一个变量时,两者均会同步变化。引用变量来源于数学,在计算机语言中用于储存计算结果或表示值抽象概念。变量可以通过变量名访问,在指令式语言中引用变量通常是可变的,但在纯函数式语言中可能是不可变的。本文还介绍了引用变量的示例及验证,以及引用变量在函数形参中的应用。当定义的函数使用引用型形参时,函数调用时形参的改变会同时带来实参的改变。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了最长上升子序列问题的一个变种解法,通过记录拐点的位置,将问题拆分为左右两个LIS问题。详细讲解了算法的实现过程,并给出了相应的代码。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
author-avatar
aaaaaaaaaaa530_552
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有