[NOIP模拟题]答题比赛

Description
LCJ报名参加了一个特殊的电视问答节目。这个节目共有n个问题,每回答正确1题,LCJ就会获得1分,而每当LCJ连续答对k题,那么他的现有得分乘以2,注意答对第K题后,是先加1分到总分中,再把总分乘以2,此时连续答对题目计数器会清零。现在LCJ成功对了m题,他想知道他的最小得分。因为这个数字可能很大,你只需要输出这个数对1,000,000,009取模的结果即可。

Input
仅一行,三个数n,m,k如题目描述。
2<=k<=n<=1090<=m<=n

Output
仅一行,一个数,LCJ的最小得分。

Sample Input
5 3 2

Sample Output
3

HINT

思路
每次答题得分的最小值一定是尽可能连续答对k1题,如果还有可以答对的题,那么都放在前面的空缺中。注意这道题要快速幂,由于连续答对km的得分为2(2(2(k)+k)+k...)=2m+2m1+...+2=2m+12,因此答案加上这个值再减去重复求的值就好了。

代码

#include <cstdio>

const long long mo=1000000009ll;

long long n,m,k,ans;

long long quickpow(long long a,long long b,long long m)
{
    int res=1;
    while(b)
    {
        if(b&1)
        {
            res=(res*a)%m;
            b--;
        }
        b/=2;
        a=(a*a)%m;
    }
    return res;
}

int main()
{
    scanf("%lld%lld%lld",&n,&m,&k);
    if(m<=n/k*(k-1))
    {
        ans=m;
    }
    else
    {
        ans=n/k*(k-1);
        m-=n/k*(k-1);
        if(m<=n%k)
        {
            ans+=m;
            ans%=mo;
        }
        else
        {
            ans+=n%k;
            ans%=mo;
            m-=n%k;
            ans+=m;
            ans+=(quickpow(2ll,m+1,mo)-2-m)*k;
            ans%=mo;
        }
    }
    printf("%lld\n",ans);
    return 0;
}

转载于:https://www.cnblogs.com/Canopus-wym/p/10376299.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NOIP(全国青少年信息学奥林匹克竞赛)是中国国内最高水平的信息学竞赛之一,是计算机领域的重要赛事。针对NOIP拟题,通常是为了帮助参赛者熟悉比赛形式和型,提供足够的训练机会。 数据下载是NOIP比赛中的一个重要环节,因为参赛者需要根据提供的数据集进行程序开发和测试。数据下载一般通过网络进行,参赛者需要在指定的时间段内下载数据集到自己的计算机上。 在进行NOIP拟题数据下载时,我们可以按照以下步骤进行操作: 1. 确认下载链接:NOIP官方会提供下载数据集的链接或者FTP地址,参赛者需要确认链接是否可用和正确。 2. 选择下载工具:根据自己的需求,参赛者可以选择合适的下载工具进行操作。常见的下载工具有浏览器内置下载工具、迅雷、IDM等,可以根据个人的习惯和需求选择合适的下载工具。 3. 打开下载工具:根据所选择的下载工具类型,打开对应的软件,进入下载界面。 4. 输入下载链接:将NOIP提供的数据集下载链接复制粘贴到下载工具的链接输入框中,点击确定或开始进行下载。 5. 等待下载完成:根据数据集的大小和网络速度不同,下载时间会有所变化。参赛者需要耐心等待下载完成,确保数据集完整地保存到自己的计算机上。 6. 验证数据完整性:下载完成后,参赛者需要验证数据集的完整性,确保所有文件都成功地保存到指定位置。可以进行文件大小的比对或者逐个文件的校验来检查数据完整性。 通过以上步骤,参赛者可以成功地进行NOIP拟题数据的下载。在实际比赛中,一个高效的数据下载过程可以提高参赛者的准备时间和竞争力,确保能够充分利用所提供的数据集进行开发和测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值