hdu1800_Fying_to_the_Mars

2024-06-17 14:58
文章标签 mars hdu1800 fying

本文主要是介绍hdu1800_Fying_to_the_Mars,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一个士兵有一个数字表示他的级别,高级别的可以教低级别的。一个士兵最多有一个老师。没有老师是合法的。一个士兵也最多有一个学生。一个士兵可以没有老师或者没有学生。魔法棒是昂贵的,所以计算最少需要多少个魔法棒。每个士兵的级别数值可以达到30位因此要使用字符串来表示士兵的级别。此题使用贪心算法,计算最多的重复数。排序然后由前到后的遍历的方法会出现超时的问题。下面是超时的代码:

#include <iostream>  
#include <algorithm>
using namespace std;//找到相同数最多的
//所有的士兵
struct soldier_type{char level[32];
};
int ecount[3001];
struct soldier_type soldier[3001];/*void check_s(int N)
{for(int i=0;i<N;i++)printf("%s\n",soldier[i].level);
}*/
//小的在前
int cmp_str(char a[],char b[])
{int ha = 0;int hb = 0;int lena = strlen(a);int lenb = strlen(b);while(a[ha]=='0')ha++;while(b[hb]=='0')hb++;int clena = lena-ha;int clenb = lenb-hb;if(clena<clenb)return -1;     //小于为零 else if(clena>clenb)return 1;      //大于为一 else{while(ha<lena&&a[ha]==b[hb]){ha++;hb++;}if(ha<lena){if(a[ha]<b[hb])return -1;elsereturn 1;}else{return 0;}}
}
bool cmp_s(soldier_type sa,soldier_type sb)
{//首位去零char * a =sa.level;char * b =sb.level; int re = cmp_str(a,b);if(re==-1) return true;else return false;
}
int main()
{int N;// 0<=N<=3000while(scanf("%d",&N)!=EOF){for(int i=0;i<N;i++){scanf("%s",soldier[i].level);ecount[i]=1;}//check_s(N);//putchar(10);sort(soldier,soldier+N,cmp_s);//check_s(N);int max = 1;for(int i=0;i<N-1;i++){if(cmp_str(soldier[i].level,soldier[i+1].level)==0){ecount[i+1]+=ecount[i];                                                 if(max<ecount[i+1])max=ecount[i+1];}}printf("%d\n",max);}return 0;
}

网上粘了一个很简单的算法,但是在下认为这个代码是错误的,虽然可以通过oj,但是int类型并不能表示30位的整数,如果30位的整数在输入是不同的数转化为int类型的数时变为相同的数那么一定会出现错误。给大家参考。

#include <iostream>
#include <map>
using namespace std;
int main()
{int n;while(scanf("%d",&n)==1){int i;map<int,int> mp;int max=INT_MIN;for(i=0;i<n;i++){int level;scanf("%d",&level);mp[level]++;if(mp[level]>max){max=mp[level]; }}printf("%d\n",max);}return 0;
}

另一个从网上看到使用hash来解决此问题的,但是我还不明白为什么不会出现索引的冲突问题。给大家看看,如果知道原因请不吝赐教。

#include<stdio.h>
#include<string.h>
#define Max 70003
int hashlevel[Max];unsigned int BKDRHash(char * str)
{while(*str=='0')*str++;unsigned int seed=131;unsigned int hash=0;//从前缀非0,开始while(*str){hash=hash*seed + *str++;}return (hash&0x7FFFFFFF);
}int main()
{int N;while(scanf("%d",&N)!=EOF){char tempstr[30];unsigned int index;memset(hashlevel,0,sizeof(hashlevel));int maxlevel=0;for(int i=0;i<N;i++){scanf("%s",tempstr);index=BKDRHash(tempstr);hashlevel[index]++;if(hashlevel[index]>maxlevel)//免得待会又要遍历一次maxlevel=hashlevel[index];}printf("%d\n",maxlevel);}return 0;
}

这篇关于hdu1800_Fying_to_the_Mars的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069758

相关文章

PAT甲级-1044 Shopping in Mars

题目   题目大意 一串项链上有n个钻石,输入给出每个钻石的价格。用m元买一个连续的项链子串(子串长度可为1),如果不能恰好花掉m元,就要找到最小的大于m的子串,如果有重复就输出多个,按递增顺序输出子串的前端和后端索引。 原来的思路 取连续的子串使和恰等于m,没有恰等于就找最小的大于。可以将子串依次累加,使得每个位置都是起始位置到该位置的序列和,整个数组显递增顺序,就可以用右边减左边

Eclipse4.X版本安装fatjar插件(luna mars 版本均可用)

首先声明,eclipse luna 和mars 楼主亲测可用。 1.安装Eclipse2.0版本的插件支持 方法如下: Help -> Install New Software... -> Work with -> 选择“The Eclipse Project Updates - http://download.eclipse.org/eclipse/updates/4.4

【PAT】【Advanced Level】1044. Shopping in Mars (25)

1044. Shopping in Mars (25) 时间限制 100 ms 内存限制 65536 kB

1100 Mars Numbers (20 分)(使用python)

People on Mars count their numbers with base 13: Zero on Earth is called “tret” on Mars. The numbers 1 to 12 on Earth is called “jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec” on Mars, r

OpenHarmony网络组件-Mars

项目简介 Mars 是一个跨平台的网络组件,包括主要用于网络请求中的长连接,短连接,是基于 socket 层的解决方案,在网络调优方面有更好的可控性,暂不支持HTTP协议。 Mars 极大的方便了开发者的开发效率。 效果演示 编译运行 windows和mac请先合入patch,然后再编译此项目,参考以下两步: 下载源码 git clone https://gitee.com/ope

产品推荐 | 瑞苏盈科基于立体帧捕捉和视频处理应用的火星Mars EB1开发板

01 产品概述 火星Mars EB1底板是为火星Mars系列FPGA和SoC核心板设计的通用底板,非常适用于立体帧捕捉和视频处理应用,可以为构建基于FPGA的定制化硬件系统提供一个良好的基础和开端。 02 核心亮点 ■  与所有火星Mars系列FPGA和SoC核心板兼容 ■ 适用于几乎所有应用的I/O接口 ■  适用于从原型到量产 ■  身材紧凑(p-ITX, 100 × 72

Flying to the Mars(hdu 1800)(trie tree)

Flying to the Mars(hdu 1800) 8888年,地球被PPF帝国统治着。由于人口的增长,PPF需要寻找更多土地让新出生的人生存。最终,PPF决定去攻打统治火星的Kscinow帝国。现在问题出现了。士兵怎么能到达火星呢?PPF召集他的将士们来征求他们的建议。由于火星上没有路,他们决定飞过去。 现在他们开始学习骑扫帚飞行的技术。我们假设每个士兵有一个数字代表他的级别,级别高的士

浙大PAT 1027题 1027. Colors in Mars

水题,代码写的有点戳 #include<stdio.h>int main(){int r,g,b,cnt;char rst[6]={'0','0','0','0','0','0'};scanf("%d %d %d",&r,&g,&b);if(r%13<10) rst[1]='0'+r%13;else rst[1]='A'+r%13-10;r=r/13;if(r%13<10) rs

英蓓特Mars board的android4.0.3源码编译过程

英蓓特Mars board的android4.0.3源码编译过程 作者:StephenZhu(大桥++) 2013年8月22日 若要转载,请注明出处 一、编译环境搭建及要点: 1. 虚拟机软件virtual box 4.2.16  2. 虚拟机装操作系统 ubuntu10.04 32bit版 3. 虚拟机内存1.792GB, 硬盘500GB(未必用上这么多,使用动态模式