2016"百度之星" - 资格赛(Astar Round1)(hdu5685(线段树、乘法逆元),hdu5686(大数),hdu5687(字典树),hdu5688)

大数加法 + 斐波那契数列 Problem Description 度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列。 Input 这里包括多组测试数据,每组测试数据包含一个正整数N,代表全1序列的长度。 1≤N≤200 Output 对于每组测试数据,输出一个整数,代表由题目中所给定 阅读详情

Problem A

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5685

解题思路:

可以用线段树求解,但是数据有问题,前期一直re,不晓得哪里错了,看了讨论才知道,数据有问题,后期数据被更正过来。但是

在hdu交时,一直wrong,看别人比赛时的代码都是用乘法逆元做的,还以为自己的做法错了,后来好心人告知,hdu上的数据是比

赛时前期的数据,瞬间吐血。。。

AC代码(线段树):

#include <iostream>
#include <cstdio>
#include <cstring>
#define lson id<<1
#define rson id<<1|1
using namespace std;

const int MOD = 9973;
const int N = 100005;
char str[N];
int ans = 0;

struct node{
    int l,r,val;
}tree[N<<2];

void build(int id,int l,int r){
    tree[id].l = l;
    tree[id].r = r;
    if(l == r){
        tree[id].val = str[l]-28;
        return ;
    }
    int mid = (l+r)>>1;
    build(lson,l,mid);
    build(rson,mid+1,r);
    tree[id].val = tree[lson].val*tree[rson].val%MOD;
}

int query(int id,int l,int r){
    if(tree[id].l >= l && tree[id].r <= r)
        return tree[id].val;
    int mid = (tree[id].l+tree[id].r)>>1;
    if(r <= mid)
        return query(lson,l,r);
    if(l > mid)
        return query(rson,l,r);
    return query(lson,l,mid)*query(rson,mid+1,r)%MOD;
}

int main(){
    int n;
    while(~scanf("%d",&n)){
        scanf("%s",str+1);
        int a,b,len = strlen(str+1);
        build(1,1,len);
        while(n--){
            scanf("%d%d",&a,&b);
            if(a < 1 || b > len){
                printf("%d\n",ans);
                continue;
            }//如果以后数据被更正过来,可不要此步。
            ans = query(1,a,b);
            printf("%d\n",ans);
        }
    }
    return 0;
}

AC代码(乘法逆元):

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

const int MOD = 9973;
const int N = 100005;
char str[N];
int inv[MOD+5],no[N];

int main(){
    inv[1] = 1;
    for(int i = 2; i < MOD; ++i)
        inv[i] = inv[MOD%i]*(MOD-MOD/i)%MOD;
    int n;
    while(~scanf("%d",&n)){
        scanf("%s",str);
        int len = strlen(str);
        no[0] = 1;
        for(int i = 0; i < len; ++i)
            no[i+1] = no[i]*(str[i]-28)%MOD;
        while(n--){
            int a,b;
            scanf("%d%d",&a,&b);
            printf("%d\n",no[b]*inv[no[a-1]]%MOD);
        }
    }
    return 0;
}

Problem B

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5686

解题思路:

这题hdu数据也有问题,拿比赛时的代码交上去Wrong了,后来才发现这题数据也有问题,n可以等于0.。。。而且等于0时,是输出

一空行。。。

AC代码:

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        BigInteger[] dp = new BigInteger[205];
        dp[1] = BigInteger.ONE; dp[2] = BigInteger.valueOf(2);
        for(int i = 3; i <= 200; ++i)
            dp[i] = dp[i-1].add(dp[i-2]);
        Scanner sca = new Scanner(System.in);
        while(sca.hasNext()){
            int n = sca.nextInt();
            if(n == 0){
                System.out.println();
                continue;
            }
            System.out.println(dp[n]);
        }
    }
}

Problem C

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5687

解题思路:

这题题目不难,但是要注意一些细节,比如原来有hello,要你删除he后,剩下的前缀如果值为0了,也要被删除,这点注意好就行

了。(具体细节看deltrie这个函数)

AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

struct node{
    int cnt;
    struct node *next[26];
    node(){
        cnt = 0;
        memset(next,0,sizeof(next));
    }
};

node *root = NULL;
char op[10],str[35];

void build(char *s){
    node *p = root;
    int l = strlen(s);
    for(int i = 0; i < l; i++){
        if(p->next[s[i]-'a'] == NULL){
            p->next[s[i]-'a'] = new node();
        }
        p = p->next[s[i]-'a'];
        p->cnt++;
    }
}

void del(node *root){
    for(int i = 0; i < 26; ++i){
        if(root->next[i] != NULL)
            delete(root->next[i]);
    }
    delete root;
}

void deltrie(char *s){
    int l = strlen(s);
    node *p = root;
    for(int i = 0; i < l; ++i){
        if(p->next[s[i]-'a'] == NULL)
            return ;
        p = p->next[s[i]-'a'];
    }
    int num = p->cnt;
    node *q;
    p = root;
    for(int i = 0; i < l; ++i){
        q = p->next[s[i]-'a'];
        q->cnt -= num;
        if(q->cnt == 0){
            del(q);
            p->next[s[i]-'a'] = NULL;
            return ;
        }
        p = p->next[s[i]-'a'];
    }
}

bool findtrie(char *s){
    node *p = root;
    int l = strlen(s);
    for(int i = 0; i < l; i++){
        if(p->next[s[i]-'a'] == NULL)
            return false;
        p = p->next[s[i]-'a'];
    }
    return true;
}

int main(){
    int n;
    while(~scanf("%d",&n)){
        root = new node;
        for(int i = 0; i < n; ++i){
            scanf("%s%s",op,str);
            if(op[0] == 'i')
                build(str);
            else if(op[0] == 'd')
                deltrie(str);
            else{
                if(findtrie(str))
                    puts("Yes");
                else
                    puts("No");
            }
        }
    }
    return 0;
}

Problem D

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5688

解题思路:

直接用map处理即可。。。

AC代码:

#include <iostream>
#include <cstdio>
#include <string>
#include <map>
#include <algorithm>
using namespace std;

map<string,int> ma;

int main(){
    int n;
    while(~scanf("%d",&n)){
        ma.clear();
        while(n--){
            string name;
            cin>>name;
            sort(name.begin(),name.end());
            printf("%d\n",ma[name]);
            ++ma[name];
        }
    }
    return 0;
}


带挂牵引车前向运动模型推导及仿真实现 牵引车-半挂车的车辆结构与普通的车辆相比增加了一个半挂车,它们之间通过鞍座相连接,为了分析半挂牵引车运动过程中的位姿和状态,本文将基于车辆的机械结构建立对应的运动学模型,该模型基于以下假设: 车辆行驶过程中,道路平坦且无凸凹; 车辆低速行驶,且运行过程中车身无侧倾和俯仰运动; 车辆行驶过程中,轮胎无形变,无侧向滑动,且无侧向力; 牵引车和半挂车均满足阿克曼转向几何原理; 牵引车与半挂车不会发现折叠。 阅读详情

相关推荐

FPGA设计中的扇出约束实战:从XDC到代码优化的全流程解析

本文全面解析FPGA设计中扇出约束的重要性与应用,详细介绍了从XDC约束文件设置到HDL代码优化的全流程实战技巧。通过MAX_FANOUT约束控制信号负载,结合寄存器复制和物理优化策略,有效解决高扇出导致的时序违例和布线拥塞问题,提升设计性能和可靠性。

nept的博客 796

HDU5658-Problem B(斐波拉契数列)

度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列。 Input 这里包括多组测试数据,每组测试数据包含一个正整数N,代表全1序列的长度。 1≤N≤200 Output 对于每组测试数据,输出一个整数,代表由题目中所给定的全1序列所能形成的新序列的数量。 Sample Input 1 3 5 Sample Output 1 3 8 Hint 如果序列是:(111)。可以构造出如下三个新序列

weixin_43357583的博客 258

数据分析——员工离职预测

员工离职预测一. 题目描述二. 数据说明三. 步骤实现1.导入并查看2.数据探索性分析3.数据处理4.模型分析5.结果分析(1) 可视化的结果分析(2)特征选择结果分析(3)多模型交叉验证结果分析 一. 题目描述 员工是否准备离职是困扰用人单位的问题,其关系到单位业务的开展及新人员的招聘,及时的分析出有离职倾向的员工成为关键的因素。数据主要包括影响员工离职的各种因素(工资、出差、工作环境满意度、工作投入度、是否加班、是否升职、工资提升比例等)以及员工是否已经离职的对应记录。 二. 数据说明 数据分为训练数据

weixin_43925467的博客 1万+

度熊全是由1构成的字符串

度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列。 Input 这里包括多组测试数据,每组测试数据包含一个正整数N,代表全1序列的长度。 1≤N≤200 Output 对于每组测试数据,输出一个整数,代表由题目中所给定的全1序列所能形成的新序列的数量。 Samp...

weixin_30502157的博客 364

FPGA时钟架构解密:从SRCC/MRCC到全局时钟树的实战指南

本文深入解析Xilinx 7系列FPGA时钟架构,从SRCC/MRCC引脚特性到全局时钟树设计,详细介绍了BUFG、BUFMR等关键组件的应用场景和优化策略。通过对比SRCC与MRCC的驱动范围及适用场景,提供低抖动时钟布线技巧和时钟域交叉(CDC)设计方法,帮助工程师构建高性能FPGA时钟系统。

weixin_29191081的博客 1483

Webug4.0 打靶笔记

一、Webug 的安装 (1)基本信息 WeBug 名称定义为”我们的漏洞”靶场环境 ,基础环境是基于 PHP/mysql 制作搭建而成,中级环境与高级环境分别都是由互联网漏洞事件而收集的漏洞存在的操作环境。部分漏洞是基于Windows操作系统的漏洞所以将WeBug的web环境都装在了一个纯净版的Windows 2003的虚拟机中。在 webug3.0 发布后的四百多天 226安全团队终于在大年初二发布了 webug 的 4.0 版本。 (2)虚拟机的安装 最新超详细VMware虚拟机下载与安装_隐

m0_60716947的博客 6127

HDU 5686 Problem B(大数:斐波那契)

Problem BTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1493    Accepted Submission(s): 612Problem Description  度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并...

BBHHTT的博客 452

ENVI-met新手必看:从零开始创建城市微气候模型(附详细步骤+底图制作技巧)

本文为ENVI-met新手提供从零开始创建城市微气候模型的详细指南,包括环境准备、参数配置、底图制作技巧和三维模型构建步骤。特别针对常见问题提供解决方案,帮助初学者快速掌握城市微气候模拟技术,提升建模效率。

weixin_29269441的博客 404

hdu 5686 Problem B

Problem Description 度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列。 Input 这里包括多组测试数据,每组测试数据包含一个正整数N,代表全1序列的长度。 1≤N≤200 Output 对于每组测试数据,输出一个整数,代表由题目中所给定

MasterG 373

华为防火墙NAT避坑指南:当双ISP出口遇到服务器发布,这些细节不注意会翻车

本文深入解析华为防火墙在双ISP出口环境下服务器发布的实战配置,重点探讨no-reverse参数对Server-Map表的影响、源进源出功能的实现及线路切换时的会话保持问题。通过策略路由和智能选路技术,确保HTTP/FTP服务在多运营商链路中的高可用性,避免路径不对称和NAT映射冲突等常见陷阱。

weixin_30897233的博客 548

Java写项目前的准备工作指南(技术栈选择 环境搭建和工具配置 项目结构设计与模块划分)

在开始编写一个 Java 项目之前,做好充分的准备工作是至关重要的。很多初学者可能在没有清晰规划的情况下就开始编写代码,导致项目开发进度缓慢、结构混乱,甚至最终无法按预期完成。而事实上,项目的成功不仅仅取决于编码能力,还包括项目初期的规划和准备。准备工作是确保项目顺利进行的基础,它包括技术选型、环境搭建、需求分析、团队协作及项目管理等多个方面。通过这些准备,我们可以确保项目的开发不仅高效而且有可维护性,最终能交付出高质量的代码。在项目开发过程中,异常处理是非常关键的一部分。

eternal__day的博客 1188

HDU1865 1sting

问题链接:HDU1865 1sting。 问题描述:参见上文。 问题分析:这个问题与“HDU5686 Problem B”几乎是同一个问题。 这个问题看似一个字符串排列问题,然而只是计算排列数量,可以用斐波拉契数列来解。 对于由所有1构成的字符串而言,用f(n)表示其长度为n时的可能数,有以下的情形: 长度为1时,即“1”,无法合并,只有,1种可能; 长度为...

weixin_34037515的博客 188

三菱FX5U系列PLC与汇川IT6000系列触摸屏进行MODBUS TCP通信的具体方法

三菱FX5U系列PLC与汇川IT6000系列触摸屏进行MODBUS TCP通信的具体方法

Robot_PLC_HMI_Automation 6514

HDOJ/HDU 5686 Problem B(斐波拉契+大数~)

Problem Description 度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列。 Input 这里包括多组测试数据,每组测试数据包含一个正整数N,代表全1序列的长度。 1≤N≤200 Out...

weixin_33961829的博客 161

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

2016"百度之星" - 资格赛(Astar Round1)【解题报告】

这里将本次资格赛的题目和解题报告放上来,自己也从中学习了复习了不少知识点,做题的感觉不错。 Problem A    Accepts: 1299    Submissions: 9670  Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

B100402352的专栏 1859

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

2016 百度之星 B题(java实现)

Problem B      Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description 度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1

T_ravelers的博客 910

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

hdoj1865 1string(大数,打表,大数斐波那契数列)

Problem Description You will be given a string which only contains ‘1’; You can merge two adjacent ‘1’ to be ‘2’, or leave the ‘1’ there. Surly, you may get many different results. For example, given

菜鸟的自我修养 659

HDU - 5686 Problem B

Fibonacci数列的大数运算

The Blog Of Uncle_Sugar 670

【leetcode】第229场周赛5685、5686、5687、5688

5685. 交替合并字符串 class Solution: def mergeAlternately(self, word1: str, word2: str) -> str: n1, n2 = map(len, (word1, word2)) i, j = 0, 0 res = '' while i < n1 and j < n2: res += word1[i] r

KaelCui的博客 291

HDU - 5686

度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列。 Input这里包括多组测试数据,每组测试数据包含一个正整数NN,代表全1序列的长度。  1≤N≤2001≤N≤200 Output对于每组测试数据,输出一个整数,代表由题目中所给定的全1序列所能形成的新序列的数量

active2489595970的博客 351

百度之星2014-2016资格赛试题及解答

百度之星2014-2016资格赛试题、解答及代码实现

仰望星空 5367

2016百度之星资格赛

Problem A度熊手上有一本字典存储了大量的单词,有一次,他把所有单词组成了一个很长很长的字符串。现在麻烦来了,他忘记了原来的字符串都是什么,神奇的是他竟然记得原来那些字符串的哈希值。一个字符串的哈希值,由以下公式计算得到: H(s)=∏i≤len(s)i=1(Si−28) (mod 9973)H(s)=\prod_{i=1}^{i\leq len(s)}(S_{i}-28)\ (mod\ 9

^_^ 3317

hdoj 5686 Problem B(Astar Round1)递推

f(n)表示n个1可以构成的方案数。则加一个1的时候,前面n种仍然成立 f(n+1)=f(n)+*;  第n+1个1和第n个1相加构成2,前面n-1个1可以组合的个数。 f(n+1)=f(n)+f(n-1); 没说要取模,所以肯定要用到大数了。 代码: import java.math.BigInteger; import java.util.Scanner; pub

CillyB的博客 471

2016"百度之星" - 资格赛(Astar Round1) 题解

Problem B Problem DProblem B度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列。 1≤N≤200#include <iostream> #include <cmath> #include <vector> #include <cstdio> #incl

nike0good |Oier&ACMer | 熟能生巧 736

HDU 5686 高精度加法

HDU 5686 Problem B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 488    Accepted Submission(s): 186 Problem Description   度熊面前有一个全

DT2131 807

HDU 5686 (斐波那契数列 高精度)

Problem B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 222    Accepted Submission(s): 54 Problem Description   度熊面前有一个全是由1构成的字符串

morejarphone~ 1731
上一篇: 操作系统fork函数解析
下一篇: Ubuntu修改用户密码时,出现: passwd: Authentication token manipulation error
yphacker
博客等级 码龄12年 199粉丝 540原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值