洛谷 题解 CF910C 【Minimum Sum】
当时看到这题一脸懵逼,莫名想到了复杂度为O(10000000000*n)的算法,然而肯定会超时(废话)
算法楼上楼下都说的很清楚了
很明显这题是要用每个字母的权值进行排序。然后依次进行赋值。
\(\color{red}\text{注意:不能有前导零,所以要进行特判}\)
看代码吧:
#include<bits/stdc++.h>
using namespace std;
string s[1100];
int n;
struct Node
{
int num,sum;//num表示该数组下标表示的字母,因为排序后会打乱,所以要先记录一下
bool first;//是否首字母
}word[11];//分别表示a,b,c,d,e,f,g,h,i,j
int p[11];//表示a~j分别代表的
bool vis[11];//表示0~9这9个数是否用过
inline bool cmp(Node u,Node v)//按权值排序
{
return u.sum>v.sum;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=10;i++)word[i].num=i;//先赋值
for(int i=1;i<=n;i++)
{
cin>>s[i];
word[s[i][0]-'a'+1].first=1;//首字母
for(int j=0;j<s[i].size();j++)
{
word[s[i][j]-'a'+1].sum+=pow(10,s[i].size()-j);//加权值
}
}
sort(word+1,word+11,cmp);//排序
/*for(int i=1;i<=10;i++)
{
cout<<word[i].num<<" "<<word[i].sum<<" "<<word[i].first<<endl;
}*/
for(int i=1;i<=10;i++)
{
if(word[i].first)//如果它是首字母
{
for(int j=1;j<=9;j++)if(!vis[j])//从1~9中选一个
{
vis[j]=1;//标记为用过
p[word[i].num]=j;//这时记录的东西就很有用了
break;
}
}
else
{
for(int j=0;j<=9;j++)if(!vis[j])//如果不是首字母,那就在0~9中选择
{
vis[j]=1;//标记为用过
p[word[i].num]=j;
break;
}
}
}
/*for(int i=1;i<=10;i++)cout<<p[i]<<" ";
cout<<endl;*/
int ans=0;
for(int i=1;i<=n;i++)
{
int cnt=0;
for(int j=0;j<s[i].size();j++)
{
cnt=cnt*10+p[s[i][j]-'a'+1];//计算当前字符串的值
}
ans+=cnt;//总答案加上
}
cout<<ans<<endl;
return 0;
}
洛谷 题解 CF910C 【Minimum Sum】的更多相关文章
- 洛谷 题解 UVA572 【油田 Oil Deposits】
这是我在洛谷上的第一篇题解!!!!!!!! 这个其实很简单的 我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见 #include<iostream> #include&l ...
- 洛谷 题解 P1600 【天天爱跑步】 (NOIP2016)
必须得说,这是一道难题(尤其对于我这样普及组205分的蒟蒻) 提交结果(NOIP2016 天天爱跑步): OJ名 编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间 Libre ...
- 洛谷题解P4314CPU监控--线段树
题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=30 ...
- 洛谷 题解 2165 [AHOI2009]飞行棋
本蒟蒻又来发题解了, 看到这个题目,本蒟蒻直接开始推公式.. 嗯,可以通过弧长,推出弦长(l = 2 * r * cos(90 * l / (r * Π)); 然后对比各条弦长的平方和与直径的平方. ...
- 【洛谷P2398】GCD SUM
题目大意:求 \[\sum\limits_{i=1}^n\sum\limits_{j=1}^ngcd(i,j)\] 题解: 最重要的一步变换在于. \[\sum\limits_{k=1}^n k \s ...
- 洛谷题解 P1315 【观光公交】
这道题很多人都用的模拟(或者暴力),今天我就写一个"标准"的贪心发给大家.(我这段代码差点超时···也差点超内存···) 主要思路:通过贪心求得最小值即可,把加速器用到乘客最多的两 ...
- 洛谷题解 CF777A 【Shell Game】
同步题解 题目翻译(可能有童鞋没读懂题面上的翻译) 给你三张牌0,1,2. 最初选一张,然后依次进行n次交换,交换规则为:中间一张和左边的一张,中间一张和右边一张,中间一张和左边一张...... 最后 ...
- 洛谷题解 CF807A 【Is it rated?】
同步题解 题目 好吧,来说说思路: 1.先读入啦~(≧▽≦)/~啦啦啦 2.判断a[i]赛前赛后是否同分数,如果分数不同,则输出,return 0 . 3.如果同分数,则判断a[i]赛前(或赛后)是否 ...
- 洛谷题解 P1138 【第k小整数】
蒟蒻发题解了 说明:此题我用的方法为桶排(我翻了翻有人用了桶排只不过很难看出来,可能有些重复的,这个题只是作为一个专门的桶排来讲解吧) (不会算抄袭吧 ‘QWaWQ’) 简单来说(会的人跳过就行): ...
随机推荐
- jQuery.each(object, [callback])
jQuery.each(object, [callback]) 概述 通用遍历方法,可用于遍历对象和数组.大理石平台检定规程 不同于遍历 jQuery 对象的 $().each() 方法,此方法可用于 ...
- click([[data],fn]) 触发每一个匹配元素的click事件。
click([[data],fn]) 概述 触发每一个匹配元素的click事件. 这个函数会调用执行绑定到click事件的所有函数.大理石平台精度等级 参数 fnFunctionV1.0 在每一个匹配 ...
- HashMap判断键是否为null
用containsKey(),而不用get(): HashMap中,null可以作为键,这样的键只有一个:可以有一个或多个键所对应的值为null.当get()方法返回null值时,即可以表示HashM ...
- Dubbo——基础
一.分布式基础理论 1.1 什么是分布式系统? “分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统” 分布式系统(distributed system)是建立在网络之上的软件系 ...
- jmeter如何使用正则表达式,如何提取token等想要的数据
使用正则表达式,提取你想要的任何数据, 例如要提取响应结果里的token字段及sex字段(响应内容为: "token":"83EEAA887F1D2F1AA1CDA9E1 ...
- IE与其他浏览器兼容性问题总结
1.eval(idName) [问题描述]:IE.safari.Chrome浏览器下都可以使用eval(idName)或getElementById(idName)来取得id为idName的HTML对 ...
- PostgreSQL判断一个表是否存在
postgresql判断一个表是否存在: 方法一: select count(*) from pg_class where relname = 'tablename'; 方法二: select cou ...
- 高性能高可用的微服务框架TarsGo的腾讯实践
conference/2.3 高性能高可用的微服务框架TarsGo的腾讯实践 - 陈明杰.pdf at master · gopherchina/conferencehttps://github.co ...
- 17 Flutter仿京东商城项目 保存历史搜索记录 删除历史记录 清空历史记录 长按删除
Storage.dart import 'package:shared_preferences/shared_preferences.dart'; class Storage{ static Futu ...
- LVS+Keepalived小试牛刀
一.ipvsadm命令1.基本命令操作1.1)添加规则 ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p timeout] [-M netm ...