9.29考试总结

9.29考试总结

P2390 地标访问

一道玄学水题。其实不难。就是二分太容易出问题了。不好调试233

所以学到了系统函数 ——

lower_bound(add, add + n + 1, x) - add;

因为返回值好像是一个地址,所以减去数组add[0]就可以直接得到位置

这个二分最后被我改成了暴力枚举

从负数地标位置开始,也可以很好的将全部情况都枚举出来

核心代码:

for (int i=1; i<=n; ++i)
    {
        if (add[i] >= 0) break;
        int x = t - abs(add[i]) >> 1;
        int y = t - 2 * abs(add[i]);
        int a = lower_bound(add, add + n + 1, x) - add;
        int b = lower_bound(add, add + n + 1, y) - add;
        ans = max(ans, max(a - i + pd, b - i + pd));
    }

P2532 树屋阶梯

卡特兰数(听说是一个裸题)
f(n)=((n+2)(n+3)...(n+n))/(123...*n);

公式是这个,但是会发现有加法,减法,乘法,除法。又要用高精度,除法就很不友好了。

但是可以发现分子和分母可以抵消掉一部分,就可以变成只需要高精乘单精。

结构体封装大发好!

#include<bits/stdc++.h>

#define IL inline
#define open(s) freopen(s".in", "r", stdin); freopen(s".out", "w", stdout);

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
const int N = 510;

int n, a[N], b[N];

struct date
{
    int l, num[N*10];
    
    date operator * (const int x)
    {
        date p = {0};
        int r = 0, m = l;
        for (int i=1; i<=l; ++i)
        {
            r += num[i] * x;
            p.num[i] = r % 10;
            r /= 10;
        }
        while (r)
        {
            p.num[++m] = r % 10;
            r /= 10;
        }
        while (!p.num[m]) --m;
        p.l = m;
        return p;
    }
    
    void out()
    {
        for (int i=l; i>=1; --i)
            printf("%d", num[i]);
        printf("\n");
    }
}ans;

IL int gcd(int, int);

int main()
{
//  open("tab");
    std::ios::sync_with_stdio(false);
    cin >> n;
    for(int i=2; i<=n; i++)
    {
        a[i-1] = n + i;
        b[i-1] = i;
    }
    
    for(int i=1; i<n; i++)
        for(int j=1; j<n; j++)
        {
            if(b[j] == 1) continue;
            int g = gcd (a[i],b[j]);
            if (g != 1)
                a[i] /=g , b[j] /= g;
            if(a[i] == 1) break;
        }
      
    ans.l = ans.num[1] = 1;
    
    for(int i=1; i<n; i++)
    {
        if(a[i] == 1) continue;
        ans = ans * a[i];
    }
    ans.out();
    return 0;
}

int gcd (int x, int y)
{
    if (!y) return x;
    return gcd(y, x % y);
}

实际上推出了这个公式,再考虑到将高精度除法去掉以后就不是特别难了。

P2804 神秘数字

我觉得平均数直接用平均数去减每一个数来直接观察是否满足好像小学就会用.....可是能.....感觉我没有学过数学

实际上这个看起来很可怕的题目可以通过预处理,直接减去m,然后前缀和一下,就可以得出区间和要大于0才能保证区间内的平均数大于m

sum[j]-sum[i-1]>0 => sum[j] > sum[i-1];

然后为什么不试试神奇的归并排序来求这个序列呢?

void merge (int l, int mid, int r)
{
    int p1 = l, p2 = mid + 1, k = l - 1;
    while(p1 <= mid && p2 <= r)
    {
        if(sum[p1] < sum[p2])
        {
            ans += (mid - p1 + 1);
            ans %= mod;
            temp[++k] = sum[p2];
            p2++;
        }
        else if(sum[p1] >= sum[p2])
        {
            temp[++k] = sum[p1];
            p1++;
        }
    }
    while(p1<=mid) temp[++k] = sum[p1++];
    while(p2<=r) temp[++k] = sum[p2++];
    for(int i=l; i<=r; i++)
        sum[i] = temp[i];
}

归并的最后合并的操作。顺手就求出了ans.....还真是方便(话说我还不怎么记得敲归并....看来还是要好好补补)

P1221 最多因子数

神仙题,等我改出来再填坑吧。

提前祝大家国庆节过的愉快~

转载于:https://www.cnblogs.com/rendex/p/9732440.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值