zoukankan      html  css  js  c++  java
  • [CSP-S模拟测试]:666(模拟)

    题目描述

    不忘初心。

      小$pi$假期在家无聊,打开了某弹幕直播网站。
      突然,有一个精彩的镜头。
      小$pi$看到了满屏的$6$,其中,有$666$、也有$666666$、也有$6666666666...$
      小$pi$也想发个弹幕,他打算发$n$个$6$。
      然而当他按下第一个$6$时,键盘上$6$的键坏了。
      这时,弹幕框里只有$1$个$6$。
      键盘坏了什么的不要紧,先把弹幕发了才是正事。
      于是小$pi$打算用复制粘贴这类操作来生成这$n$个$6$。
      具体的说,小$pi$电脑的操作系统有唯一的一块剪贴板,初始为空,现在小
      $pi$一共有三种操作:
      第$1$种操作,全选然后复制。这样会把剪贴板里的内容设置为当前弹幕框内内容。
      第$2$种操作,粘贴。会把剪贴板中的内容连接到弹幕框现有的内容后面。
      第$3$种操作,$backspace$。会把在当前弹幕框中删除一个$6$。
      小$pi$很好奇现在生成想要的$n$个$6$至少需要多少次操作,来找到了学信息学竞赛的你。
      注意本题时间限制


    输入格式

      一行一个整数$n$。


    输出格式

      一行一个整数$ans$,表示最少操作次数。


    样例

    样例输入1:

    0

    样例输出1:

    1

    样例输入2:

    3

    样例输出2:

    3


    数据范围与提示

      其中$6\%$的数据,$n=2^k$,$k$为正整数。
      其中$24\%$的数据,$nleqslant 1,000$。
      其中$20\%$的数据,内存扩充至$768MB$。
      其中$20\%$的数据,时间扩充到$3s$。
      其中$30\%$的数据,无特殊限制。
      所有数据存在一种划分方法,使得上述范围两两没有交集。
      对于$100\%$的数据,$0leqslant nleqslant 1,000,000$。


    题解

    模拟全过程。

    设$f[i]$表示$i$个$6$的步数,初始时将其都付成没有访问过,$f[1]=0$。

    然后每次暴力扫,用现在有的更新即可。

    因为最多会走$48$步,所以时间复杂度是对的。

    时间复杂度:$Theta(48 imes n)$。

    期望得分:$100$分。

    实际得分:$100$分。


    代码时刻

    #include<bits/stdc++.h>
    int n,dp[1000100],bs;
    int main()
    {
    	scanf("%d",&n);
    	memset(dp,-1,sizeof(dp));
    	dp[1]=0;int now=n+50;
    	while(dp[n]==-1)
    	{
    		bs++;
    		for(register int i=1;i<=now;i++)
    		{
    			if(dp[i]==-1)continue;
    			register int flag=i*(bs-dp[i]);
    			if(flag<=now&&dp[i]<bs&&dp[flag]==-1)dp[flag]=bs;
    			if(dp[i-1]==-1)dp[i-1]=dp[i]+1;
    		}
    	}
    	printf("%d",dp[n]);
    	return 0;
    }
    

    rp++

  • 相关阅读:
    Linux学习(五)
    Linux学习(四)
    Linux学习(三)
    Linux学习(二)
    Linux学习(一)
    JAVA学习笔记(九)
    JAVA学习笔记(八)
    连接报错'mysql_native_password'
    TabControl改变TabPage时自动字体变大
    问题:winform窗体与设计时不一致
  • 原文地址:https://www.cnblogs.com/wzc521/p/11747082.html
Copyright © 2011-2022 走看看