首页 > 其他分享 >SMU Summer 2024 Contest Round 1

SMU Summer 2024 Contest Round 1

时间:2024-07-08 15:30:02浏览次数:16  
标签:Summer int res SMU long 2024 ans using i64

SMU Summer 2024 Contest Round 1

Dice and Coin

题意

给个 n 面骰子和一枚硬币,初始投骰子,若骰子的值在 1 到 \(K-1\) 之间则反复投
硬币,硬币为正则该值翻倍,否则为 0 ,当值为 0 输掉游戏或者大于等于 \(K\) 时赢
得游戏结束,问你可以赢得游戏的概率为多少。

思路

以 1 到 n 为初始值时,因为骰子为正时其值倍增,即一定是乘以一个 \(2^x\) 后大于等
于 \(K\) ,所以以该值赢得游戏的概率就是 \(\frac{1}{x}\) ,累加 n 个初始值的胜利概率后除以 n 即
可。

代码

#include<bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, k;
    cin >> n >> k;

    double ans = 0.0;
    i64 res = 1;
    vector<i64> c(50);
    for (int i = 0; i <= 30; i ++) {
        c[i] = res;
        res *= 2;
    }

    for (int i = 1; i <= n; i ++) {
        for (int j = 0; j <= 30; j ++) {
            if (c[j] * i >= k) {
                ans += 1.0 / (1.0 * c[j]);
                break;
            }
        }
    }

    ans /= n;

    printf("%.10lf\n", ans);

    return 0;
}

equeue

题意

给定一个长度为 n 的序列,和一个最大操作次数 k。
有以下四种操作:

  • 操作 A:在序列左侧取走一个数放入手中。
  • 操作 B:在序列右侧取走一个数放入手中。
  • 操作 C:将手中任意一个数放在序列左侧。
  • 操作 D:将手中任意一个数放在序列右侧。

也可以选择什么都不操作。
求在若干次操作后手中留下数的最大值。

思路

因数据量小,考虑暴力,但纯暴力会超时,因此需要使用优先队列优化。
枚举操作A、B的次数,多出的次数则需要视情况执行C、D操作,若我们手中有一
个负数,那么放回去可以使最终的和增大,反之我们则不操作,放回去的顺序一定
是从小到大,负数越小,增大越多。

代码

#include<bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, k;
    cin >> n >> k;

    vector<int> a(n + 1);
    for (int i = 1; i <= n; i ++)
        cin >> a[i];

    i64 ans = 0;
    priority_queue<int, vector<int>, greater<int>> Q;
    for (int i = 0; i <= k; i ++) {
        for (int j = 0; j + i <= k && j + i <= n; j ++) {
            for (int l = 1; l <= i; l ++)
                Q.push(a[l]);
            for (int r = n; r > n - j; r --)
                Q.push(a[r]);

            i64 res = k - i - j;
            while (Q.size() && res-- && Q.top() < 0) Q.pop();

            res = 0;
            while (Q.size()) {
                res += Q.top();
                Q.pop();
            }

            ans = max(ans, res);
        }
    }

    cout << ans << '\n';

    return 0;
}

Sequence Decomposing

题意

给 n 个数,满足 $i < j $ 并且 \(A_i < A_j\)条件的可以染成一个颜色,问最少需要多少颜色可以全染色。

思路

其实类似就是让你找出若干个递增子序列,答案就是递增子序列的数量,因此我们可以从后往前枚举当前值,将当前值放在已有的递增子序列里末尾最接近它的那个序列里,比如当前值为 5 ,现有两个递增子序列 6 7 … 和 7 8 … ,最优应该是放在 6 后面,7 留给更有可能性的,否则之后再碰到 6 就需要重新以它为终点再开一个序列,那样就不是最少了。

这里我是用一个数组只存了每个序列的末尾一个数,因为也只用到这个数,当序列里有满足要求的就放进去,替换掉最后一个,否则新建一个序列。

代码

#include<bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;

    vector<int> a(n + 1);
    for (int i = 1; i <= n; i ++)
        cin >> a[i];

    int sum = 0;

    vector<int> c;
    for (int i = n; i > 0; i --) {
        auto t = upper_bound(c.begin(), c.end(), a[i]);
        if (t == c.end()) {
            c.push_back(a[i]);
        } else {
            *t = a[i];
        }
    }

    cout << c.size() << '\n';

    return 0;
}

Cell Distance

题意

给一个 \(n\times m\) 的矩阵,从中选出 \(k\) 个点,用 \(∑_{i=1}^{K−1}∑_{j=i+1}^K(∣x_i−x_j∣+∣y_i−y_j∣)\) 计算其贡献,问你将所有方案的贡献总和模 1e9+7 的答案。

思路

转换一下,先考虑 x 坐标的贡献(将 y 的贡献看成 0 )。

考虑两个点间 x 坐标相差为 \(d(1 ≤ d ≤ n−1)\) 时的贡献(\(d=0\) 的时候没有贡献所以这里不考虑)。设这两个点的坐标为 \((x_1,y_1)、(x_2,y_2)\),那么就有 \(x_1 − x_2 = d,1 ≤ x_1 ,x_2 ≤ n,1 ≤ y_1 ,y_2 ≤ m\)。

则可行的 \(x_1,x_2\) 有 \(n−d\) 对 \(\{(x_1,x_2)|(1,

标签:Summer,int,res,SMU,long,2024,ans,using,i64
From: https://www.cnblogs.com/Kescholar/p/18290002

相关文章

  • 2024华为与IPD融合的质量研发体系设计,附设计案例
    (一)与IPD融合的治理研发体系设计大纲1.0IPD基础1.1IPD主业务流框架IPD(IntegratedProductDevelopment)是一种集成产品开发的方法,旨在通过跨部门协作和资源整合,提高产品开发效率和质量。其主业务流框架包括需求管理、产品规划、技术开发、产品验证和市场发布等关键环节.1.2......
  • 2024年文化研究与数字媒体国际会议 (CRDM 2024)
    2024年文化研究与数字媒体国际会议(CRDM2024)2024InternationalConferenceonCulturalResearchandDigitalMedia【重要信息】大会地点:珠海大会官网:http://www.iccrdm.com投稿邮箱:[email protected]【注意:稿将稿件Word+PDF上传至邮箱,邮件正文请备注“CRDM 2024......
  • 20240706总结(线段树应用)
    A-PhysicalEducationLessonsCF915EPhysicalEducationLessons题解:没什么好说的,动态开点模板题(好像普通线段树也可以做)B-GCDofanArrayCF1493DGCDofanArray题解:暴力分解质因数,修改的时候也把x分解,对每个质数开一个可重集合(multiset)记录一下每个质数出现的不同位......
  • 2024年,值得收藏!推荐一些好用的数据库管理工具合集!
    数据库管理工具合集!1、DBeaver(首选)DBeaver是一款免费开源的跨平台数据库管理工具,基于Java开发,支持目前几乎所有的主流数据库,包括MySQL、PostgreSQL、SQLite、Oracle、SQLServer、DB2、Sybase、Teradata、MongoDB等。它具有直观的用户界面,支持SQL编辑、数据查看、数据编辑、元......
  • 小抄 20240705
    1多观察,少评判。评判,就是用自己的主观观点在评价一个自己不了解的东西,一定会有偏见。观察,要抛开自己那些先入为主的观念,观察自己的想法,也观察眼前事物的变化,不评判,才能客观。2写作,更像是自己收集了一个问题,然后再自己解答出来。而且最关键的不是答案,而是能够准确描述问......
  • CCF-GESP计算机学会等级考试2024年6月六级C++T2二叉树
    解析:详见代码:#include<bits/stdc++.h>usingnamespacestd;intn;intq;strings;intp[100005];//p[i]表示i的父节点inta[100005];//对第i个节点的操作次数intb[100005];//第i个节点变化的总次数intdfs(intx){if(b[x]>0)returnb[x];//如果已计算,直接返......
  • CCF-GESP计算机学会等级考试2024年6月五级C++T2小杨的幸运数字
    解析:对每个数分解质因数,并统计质因数个数,详见代码:#include<bits/stdc++.h>usingnamespacestd;intn;intmain(){cin>>n;for(inti=1;i<=n;i++){intx;cin>>x;intcnt=0;//质因数个数for(intj=2;j*j......
  • CCF-GESP计算机学会等级考试2024年6月五级C++T1黑白格
    解析: 先把每行做前缀和(方便求区间和),枚举开始列和结束列,按行做双指针求和,找到和大于等于k的最小矩阵,时间复杂度O(N^3)。#include<bits/stdc++.h>usingnamespacestd;intm,n,k;inta[105][105];intans=1e9;intmain(){cin>>n>>m>>k;for(inti=1;i<=n;i++......
  • 深耕分析型数据库领域,火山引擎ByteHouse入围《2024爱分析数据库厂商全景报告》
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群。近日,爱分析发布《2024爱分析·数据库厂商全景报告》,报告中爱分析将数据市场从上至下划分为数据库服务、数据库运维管理产品、数据库产品三层,其中数据库产品又包括事务型关系数据库、混合型......
  • Codeforces Round #956 (Div. 2) and ByteRace 2024
    CF1983A.ArrayDivisibility很快发现输出\(\mathbf{1\simn}\)符合题意。B.CornerTwist结论题。关键的充要条件是\(a,b\)的每一行/列的和模\(\mathbf{3}\)后相等。证明的话,首先要想到\(\mathbf{2\times2}\)的操作是可以完成所有大小的子矩阵操作的,手模一下可以发......