2017 Multi-University Training Contest - Team 1—HDU6033&&HDU6034
HDU6033 Add More Zero
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6033
题目意思:给一个m,求一个数k使得10^k最接近2^m-1(不超过2^m-1),首先明确一点不存在10^k=2^m-1或者2^m,自己拿计算机随机算算就知道了,那现在我们只要知道2^m-1转成10进制是一个多少位的数,那么k就是多少,对2^m-1对10做对数运算算log10(2^m-1),m很大的时候2^m-1非常接近于2^m而且我们也说了不存在10^k=2^m-1或者2^m。所以log(2^m)=mlog10(2),直接算出这个数,向下取整就好了。
代码:
//Author: xiaowuga
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <queue>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <ctime>
#include <map>
#include <bitset>
#include <cctype>
#define maxx INT_MAX
#define minn INT_MIN
#define inf 0x3f3f3f3f
#define mem(s,ch) memset(s,ch,sizeof(s))
#define da cout<<da<<endl
#define uoutput(a,i,l,r) for(int i=l;i<r;i++) if(i==l) cout<<a[i];else cout<<" "<<a[i];cout<<endl;
#define doutput(a,i,l,r) for(int i=r-1;i>=0;i--) if(i==r-1) cout<<a[i];else cout<<" "<<a[i];cout<<endl;
const long long N= ;
using namespace std;
typedef long long LL;
int main() {
ios::sync_with_stdio(false);cin.tie();
LL m;
int c=;
while(cin>>m){
cout<<"Case #"<<++c<<": ";
cout<<floor(m*log10())<<endl;
}
return ;
}
HDU6034 Balala Power!
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6034
题目意思:给你n个字符串,由小写字母组成,让你对这个每个字母赋值(0-25,每个数字只能用一次),问你怎么样赋值才能让最后形成的二十六进制的数转成十进制这些数的和最大。算出这个数mod1e9+7。字符串的长度的总和可以是十万,每个字符串长度的上限就是十万。可能高达十万位的二十六进制的数,赋值的时候还要小心前导零。
思路:我们计算每个字母在第i位上的数量(这里声明一下第i为表示这个字母对总和的贡献是bit[i]*26^i)。我们把所有的字符串扫一遍计算他所有字母的贡献,通过判断他在某些位上出现的次数。来比较他们他的大小,然后赋值,对于前导零,我们需要判断是否26个字母都出现了。如果都出现了,我们需要判断最后被赋值为0的那个字母是否作为其中一个字符串的首字母出现过,反向找到第一个不在首字母出现过的字母把它赋值为0,然后再从大到小赋值,遇到这个字母我们跳过就好了。
对于排序,我们可以记录一个字母出现的最高位是多少。先通过比较最高位,比完以后,我们在从高位按位比较,高位可以决定大小而低位不一定可以决定大小,因为高位的基数大。
代码:
//Author: xiaowuga
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <queue>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <ctime>
#include <map>
#include <bitset>
#include <cctype>
#define maxx INT_MAX
#define minn INT_MIN
#define inf 0x3f3f3f3f
#define mem(s,ch) memset(s,ch,sizeof(s))
#define da cout<<da<<endl
#define uoutput(a,i,l,r) for(int i=l;i<r;i++) if(i==l) cout<<a[i];else cout<<" "<<a[i];cout<<endl;
#define doutput(a,i,l,r) for(int i=r-1;i>=0;i--) if(i==r-1) cout<<a[i];else cout<<" "<<a[i];cout<<endl;
const long long N=+;
const long long mod=1e9+;
using namespace std;
typedef long long LL;
int n;
struct Bit{
int s[N];
char ch;
bool operator <(const Bit &m)const{
if(s[]!=m.s[]) return s[]>m.s[];
else{
for(int i=s[];i>=;i--){
if(s[i]==m.s[i]) continue;
else return s[i]>m.s[i];
}
return ;
}
}
}bit[];
string q[N];
LL mi[N];
int vis[],ct,inhead[N],w[N];
void init(){
mi[]=;
for(int i=;i<N;i++){
mi[i]=mi[i-]*%mod;
}
}
int main() {
ios::sync_with_stdio(false);cin.tie();
init();
int c=;
while(cin>>n){
for(int i=;i<;i++) {mem(bit[i].s,);bit[i].ch='a'+i;}
mem(vis,);ct=;
mem(inhead,);
mem(w,);
for(int i=;i<n;i++) {cin>>q[i]; if(q[i].size()!=) inhead[q[i][]-'a']=;}
for(int i=;i<n;i++){
int len=q[i].size();
for(int j=len-;j>=;j--){
int t=q[i][j]-'a';
if(!vis[t]){vis[t]=;ct++;}
bit[t].s[len-j]++;
if(bit[t].s[len-j]>=){
bit[t].s[len-j]=;bit[t].s[len-j+]++;
bit[t].s[]=max(bit[t].s[],len-j+);
}
bit[t].s[]=max( bit[t].s[],len-j);
}
}
sort(bit,bit+);
if(ct<){
int now=;
for(int i=;i<ct;i++) w[bit[i].ch-'a']=now--;
}
else{
int flag=-;
for(int i=;i>=;i--){
if(inhead[bit[i].ch-'a']==){
flag=i; break;
}
}
int now=;
for(int i=;i<;i++){
if(flag==i) {w[bit[i].ch-'a']=;continue;}
else w[bit[i].ch-'a']=now--;
}
}
LL sum=;
for(int i=;i<n;i++){
int len=q[i].size();
int x=;
for(int j=len-;j>=;j--){
LL t=mi[x++]*w[q[i][j]-'a']%mod;
sum=(sum+t)%mod;
}
}
//cout<<ct<<endl;
cout<<"Case #"<<++c<<": ";
cout<<sum<<endl;
}
return ;
}
2017 Multi-University Training Contest - Team 1—HDU6033&&HDU6034的更多相关文章
- 2017 Multi-University Training Contest - Team 9 1005&&HDU 6165 FFF at Valentine【强联通缩点+拓扑排序】
FFF at Valentine Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- 2017 Multi-University Training Contest - Team 9 1004&&HDU 6164 Dying Light【数学+模拟】
Dying Light Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Tot ...
- 2017 Multi-University Training Contest - Team 9 1003&&HDU 6163 CSGO【计算几何】
CSGO Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- 2017 Multi-University Training Contest - Team 9 1002&&HDU 6162 Ch’s gift【树链部分+线段树】
Ch’s gift Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- 2017 Multi-University Training Contest - Team 9 1001&&HDU 6161 Big binary tree【树形dp+hash】
Big binary tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- 2017 Multi-University Training Contest - Team 1 1003&&HDU 6035 Colorful Tree【树形dp】
Colorful Tree Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- 2017 Multi-University Training Contest - Team 1 1006&&HDU 6038 Function【DFS+数论】
Function Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- 2017 Multi-University Training Contest - Team 1 1002&&HDU 6034 Balala Power!【字符串,贪心+排序】
Balala Power! Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- 2017 Multi-University Training Contest - Team 1 1011&&HDU 6043 KazaQ's Socks【规律题,数学,水】
KazaQ's Socks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
随机推荐
- Struts2 上传下载
一. 1.文件上传是web应用经常用到的一个知识.原理是,通过为表单元素设置enctype=”multipart/form-data”属性,让表单提交的数 据以二进制编码的方式提交,在接收此请求的Se ...
- UltraISO制作启动盘及提取U盘为ISO镜像
我们先来说下UltraISO这个工具,中文名也叫软碟通,他是一个无需量产你的U盘就可以把U盘做成启动盘的工具,当然了,这么强大的工具肯定不是免费版的,对,他是共享的:但是你可以下载特别版嘛..网上到处 ...
- 【转】logstash配置java环境
1.bin/logstash,新增 JAVA_CMD=/home/admin/soft/jdk1.8.0_121/bin JAVA_HOME=/home/admin/soft/jdk1.8.0_121 ...
- 由于link顺序错误导致的undefined reference
其实我之前就遇到过这个问题,也强调过,GNU-G++在link阶段是依赖输入的.o或者.a文件的顺序的.如果顺序错误会导致undefined reference错误 见这篇随笔:http://www. ...
- 跟着百度学PHP[8]-setcookie的其他参数学习
setcookie(name,value,time,path,domain,secure) 第四个参数是cookie的有效路径.顾名思义就是在那个路径下是有效的.当然了其子目录下也是有效的.比如 /h ...
- AndroidStudio添加Android源码
找了半天没找到,还是用google好啊!修改如下,打开如下的build.gradle,修改compileSdkVersion 为你下载的源码版本号. Open your sdk manager fro ...
- inline-block元素的空白间距解决方法<转>
使用inline-block来代替float进行布局,或者使用inline-block来实现元素的居中效果.有关于使用inline-block来代替float的讨论也蛮多的. 不过就是使用inline ...
- REST学习
RPC架构与REST架构 RPC:RPC将服务器看作一些列动作的集合(需要做某件事) REST:将服务器看作分布式对象集合,客户端通过调用这些对象上的方法来执行特定的任务,组件交互的可伸缩性.接口的通 ...
- jvm 调整tomcat的堆内存和常驻内存catalina.sh
4.2 性能优化 tomcat性能取决于你的内存大小 上策:优化代码 中策:jvm优化机制 垃圾回收机制 把不需要的内存回收 优化jvm--优化垃圾回收策略 优化catalina.sh配置文件. ...
- 微信APP支付 - C#
最近挺忙的,没时间写东西.然后在弄微信APP支付,网上的搜索一趟,都比较凌乱,我也遇到一些坑,不过也算弄好了,记录分享一下. 1.准备各种调用接口需要的参数,配置app.config. <!-- ...