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

洛谷P8749 [蓝桥杯 2021 省 B] 杨辉三角形

40分做法:

思路:暴力
 

直接预处理出来前1000行的杨辉三角形,然后暴力枚举,找到x,输出即可

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

const int N = 1e3 + 10;

int n = 1000;
int a[N][N];

int main() {
    a[1][1] = 1;
    for (int i = 2; i <= n; i ++) // 预处理
        for (int j = 1; j <= i; j ++)
            a[i][j] = a[i - 1][j] + a[i - 1][j - 1];

    int x; cin >> x;

    int cnt = 0;
    for (int i = 1; i <= n; i ++) // 枚举
        for (int j = 1; j <= i; j ++) {
            cnt ++;
            if (a[i][j] == x) {
                cout << cnt;
                return 0;
            }
        }       
    return 0;
}

50分做法:

思路:推公式

80分做法:

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

typedef long long ll; 

int main() {
    ll n;
    cin >> n;
    cout << n * (n + 1) / 2 + 2;
    return 0;
} 

80分做法:

思路:将上面两种方法相结合

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

const int N = 1e3 + 10;
typedef long long ll; 

int n = 1000;
int a[N][N];

int main() {
    ll x; cin >> x;
    if (x > 1000 * 999 / 2) {
        cout << x * (x + 1) / 2 + 2;
        return 0;
    }

    a[1][1] = 1;
    for (int i = 2; i <= n; i ++)
        for (int j = 1; j <= i; j ++)
            a[i][j] = a[i - 1][j] + a[i - 1][j - 1];

    ll cnt = 0;
    for (int i = 1; i <= n; i ++) 
        for (int j = 1; j <= i; j ++) {
            cnt ++;
            if (a[i][j] == x) {
                cout << cnt;
                return 0;
            }
        }       
    return 0;
}

满分(100分)做法:

思路:二分

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

typedef long long ll; 

int n; 

ll C(int a, int b) { // 求组合数函数 
    ll res = 1;
    for (int i = a, j = 1; j <= b; i --, j ++) {
        res = res * i / j;
        if (res > n) return res;
    }
    return res;
} 

bool check(int k) {
    ll l = k * 2, r = max(n, l);
    while (l < r) {
        ll mid = l + r >> 1;
        if (C(mid, k) >= n) r = mid;
        else l = mid + 1;
    }
    if (C(r, k) != n) return false;

    cout << r * (r + 1) / 2 + k + 1;

    return true;
}

int main() {
    cin >> n;
    for (int k = 16; ; k --)
        if (check(k))
            break;      
    return 
}

http://www.dtcms.com/a/131109.html

相关文章:

  • 关于无线网络安全的基础知识,涵盖常见威胁、防护措施和实用建议
  • 简单记录一下Android四大组件
  • MySQL部分总结
  • 07.unity 游戏开发-粒子系统
  • 结构化需求分析:功能、数据与行为的全景建模
  • Tauri 2.3.1+Leptos 0.7.8开发桌面应用--Sqlite数据库的写入、展示和选择删除
  • 安卓设备使用网线连接电脑lan口
  • 从存储到智能:AI NAS的技术路径与未来演进
  • Android游戏辅助工具开发详解
  • 使用OpenSceneGraph (osg)实现一个星系漫游
  • asm汇编源代码之-字库转换程序
  • Mybatis-缓存详解
  • 因泰立科技激光雷达:点亮煤矿厂自动装车的智慧之光
  • 音视频学习(三十四):H264中的宏块
  • thymeleaf配套Security6
  • 如何将excel数据快速导入数据库
  • 【时频谱分析】快速谱峭度
  • 每日算法-250413
  • deskflow使用教程:一个可以让两台电脑鼠标键盘截图剪贴板共同使用的开源项目
  • 【开发工具】科研开发中的主流AI工具整理及如何使用GPT润色英文论文
  • 【苹果cms 1】本地影视资源站搭建
  • [文献阅读] chinese-roberta Pre-Training With Whole Word Masking for Chinese BERT
  • 真实企业级K8S故障案例:ETCD集群断电恢复与数据保障实践
  • QML ListView 与 C++ 模型交互
  • 微信小程序实战案例 - 餐馆点餐系统 阶段 0 - 环境就绪
  • 玩转Docker | 使用Docker部署MicroBin粘贴板
  • Java新手村第二站:泛型、集合与IO流初探
  • k8s的配置文件总结
  • Go学习路线指南
  • springboot框架集成websocket依赖实现物联网设备、前端网页实时通信!