noip2011普及组初赛答案_NOIP普及组和提高组的区别

noip2011普及组初赛答案_NOIP普及组和提高组的区别NOIP2011普及组初赛15现有一段文言文,要通过二进制哈夫曼编码进行压缩。简单起见,假设这段文言文只由4个汉字“之”、“乎”、“者”、“也”组成,它们出现的次数分别为700、600、300、200。那么,“也”字的编码长度是(3)。解析:如图所示23#include<iostream>usingnamespacestd;intmain(){inti,n,m,ans;cin>>n>>m;i=n;

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

NOIP2011普及组初赛

15

现有一段文言文,要通过二进制哈夫曼编码进行压缩。简单起见,假设这段文言文只由 4个汉字“之”、“乎”、“者”、“也”组成,它们出现的次数分别为 700、600、300、200。那么,“也”字的编码长度是( 3)。
解析:如图所示在这里插入图片描述

23

#include <iostream>
using namespace std;
int main(){
    int i, n, m, ans;
    cin>>n>>m;
    i = n;
    ans = 0;
    while (i <= m){
        ans += i;
        i++;
    }
    cout<<ans<<endl;
    return 0;
}

输入:
10 20
输出:
165
解析:根据对程序的理解,求10~20的和即可

24

#include <iostream>
#include <string>
using namespace std;
int main(){
    string map = "22233344455566677778889999";
    string tel;
    int i;
    cin>>tel;
    for (i = 0; i < tel.length(); i++)
        if ((tel[i] >= '0') && (tel[i] <= '9'))
            cout<<tel[i];
        else if ((tel[i] >= 'A') && (tel[i] <= 'Z'))
            cout<<map[tel[i] - 'A'];
    cout<<endl;
    return 0;
}

输入:
CCF-NOIP-2011
输出:
22366472011
解析:如果输入的字符是大写字母,就按照字母的顺序在map中找到相对应的数字。如果输入的字符为数字,直接输出即可。

28

(大整数开方)输入一个正整数n(1≤n<10100),试用二分法计算它的平方根的整数部分。

#include <iostream>
#include <string>
using namespace std;
const int SIZE = 200;
struct hugeint {
  int len, num[SIZE];
};
//其中 len 表示大整数的位数;num[1]表示个位、num[2]表示十位,以此类推
hugeint times(hugeint a, hugeint b) {
    //计算大整数 a 和 b 的乘积
    int i, j; hugeint ans;
    memset(ans.num, 0, sizeof(ans.num));
    for (i = 1; i <= a.len; i++)
        for (j = 1; j <= b.len; j++)
            ①+= a.num[i] * b.num[j];
    for (i = 1; i <= a.len + b.len; i++) {
        ans.num[i + 1] += ans.num[i] / 10;
        ②;
    }
    if (ans.num[a.len + b.len] > 0)
        ans.len = a.len + b.len;
    else
        ans.len = a.len + b.len - 1;
    return ans;
}
hugeint add(hugeint a, hugeint b){
    //计算大整数 a 和 b 的和
    int i; hugeint ans;
    memset(ans.num, 0, sizeof(ans.num));
    if (a.len > b.len)
        ans.len = a.len;
    else
        ans.len = b.len;
    for (i = 1; i <= ans.len; i++) {
        ans.num[i] +=③;
        ans.num[i + 1] += ans.num[i] / 10;
        ans.num[i] %= 10;
    }
    if (ans.num[ans.len + 1] > 0) ans.len++;
    return ans;
}
hugeint average(hugeint a, hugeint b){
    //计算大整数 a 和 b 的平均数的整数部分
    int i; hugeint ans;
    ans= add(a, b);
    for(i = ans.len; i >= 2; i--) {
        ans.num[i  - 1] += (④) * 10;
        ans.num[i] /= 2;
    }
    ans.num[1] /= 2;
    if (ans.num[ans.len] == 0) ans.len--;
    return ans;
}
hugeint plustwo(hugeint a) {
    //计算大整数 a 加 2 后的结果
    int i; hugeint ans;
    ans = a;
    ans.num[1] += 2;
    i = 1;
    While ((i <= ans.len) && (ans.num[i] >= 10)) {
        ans.num[i + 1] += ans.num[i] / 10;
        ans.num[i] %= 10;
        i++;
    }
    if (ans.num[ans.len + 1] > 0)⑤;
    return ans;
}
bool over(hugeint a, hugeint b){
//若大整数 a>b 则返回 true,否则返回 false
    int i;
    if (⑥) return false;
    if (a.len > b.len) return true;
    for (i = a.len; i >= 1; i--) {
        if (a.num[i] < b.num[i])return false;
        if (a.num[i] > b.num[i]) return true;
    }
    return false;
}
int main(){
    string s;
    int i;
    hugeint target, left, middle, right;
    cin>>s;
    memset(target.num, 0, sizeof(target.num));
    target.len = s.length();
    for (i = 1; i <= target.len; i++)
        target.num[i]= s[target.len  - i] - ⑦;
    memset(left.num, 0, sizeof(left.num));
    left.len = 1;
    left.num[1] = 1;
    right = target;
    do {
        middle = average(left, right);
        if (over(⑧))right = middle;
        else left = middle;
    } while (!over(plustwo(left), right));
    for (i = left.len; i >= 1; i--)
        cout<<left.num[i];
    cout<<endl;
    return 0;
}

解析:空①,分别将乘数的第i位和第j位相乘,所以应填入乘积的i+j-1位。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189969.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月5日 上午8:43
下一篇 2026年3月5日 上午9:15


相关推荐

  • Windows+pycharm安装pytorch

    Windows+pycharm安装pytorch最近要参加一个比赛 需要用到深度学习的框架 老师建议我们用 pytorch 但是安装的时候总是发现各种错误 解决方案是 去 pytorch 官网生成下载的命令 然后再 cmd 上执行这里我们发现有 CUDA 的选项 这就需要我们安装 cuda 怎么安装 cuda 首先我们要知道我们的独立显卡的型号 然后我们要知道我们的显卡是否支持 cuda 点击这里发现是支持的 算力为 6 1

    2026年3月19日
    2
  • AMD FreeSync正式发布:更流畅 更便宜

    AMD FreeSync正式发布:更流畅 更便宜2013年10月份,NVIDIA推出了一项革命性的垂直同步技术G-Sync,通过新控制模块的加入配合GeForceGPU控制显示器刷新率,彻底解决垂直同步、刷新率限制带来的游戏画面撕裂、卡顿、延迟等问题,保证最好的流畅度。该技术的效果非常明显,但缺点也同样明显,那就是需要显示器增加新的模块,成本较高,而且照例是NVIDIA的封闭技术。随后,AMD也提出了自己的解决方案,称之为Fr

    2022年6月3日
    54
  • 如何用 PS+StartAI 插件内置 nano banana 做拼图效果?传统技巧 + AI 方案全解析

    如何用 PS+StartAI 插件内置 nano banana 做拼图效果?传统技巧 + AI 方案全解析

    2026年3月15日
    2
  • centos系统大量time wait占用的解决

    centos系统大量time wait占用的解决统计在一台前端机上高峰时间TCP连接的情况,统计命令:netstat-n|awk’/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}’除了ESTABLISHED,可以看到连接数比较多的几个状态是:FIN_WAIT1,TIME_WAIT,CLOSE_WAIT,SYN_RECV和…

    2022年5月9日
    252
  • 冒泡排序算法(Java)

    冒泡排序算法(Java)

    2022年1月15日
    55
  • PEID Autism专版绿色版

    PEID Autism专版绿色版名称 PEIDAutism 专版绿色版版本 1 0 软件大小 609KB 软件语言 简体中文软件授权 免费版应用平台 Win7 Vista Win2003 WinXPPEiD 是一款著名的查壳工具 其功能强大 现在有软件很多都加了壳 给激活成功教程汉化带来非常大的不便 PEiD 几乎可以侦测出所有的壳 其数量已超过 470 种 PE 文档的加壳类型和签名 另外还可识别出 EXE 文件是用什么

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号