普转提——有趣的数,欢乐ABC,打游戏
Posted whff521
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了普转提——有趣的数,欢乐ABC,打游戏相关的知识,希望对你有一定的参考价值。
有趣的数——构造符合条件的数
给你一个区间,问有多少个数符合每一位中,只有一个数字和其他数字不同,也就是其他数字都相同,有且只有一个异类;
数据范围是1e16;
因为只考虑数量而不用管大小;
只要0到9枚举出来就好了;
#include<cstdio>
#include<map>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
map<ll,int>mp;
ll l,r;
int a[20];
int check(int x,int len)
{
ll sum=0;
for(int i=1;i<=len;i++)
{
if(a[i]==-1) a[i]=x;
sum=sum*10+a[i];
}
if(sum>=l&&sum<=r)
{
if(!mp[sum])
{
mp[sum]=1;
return 1;
}
//printf("%d
",sum);
return 0;
}
else return 0;
}
int ans;
int main()
{
scanf("%lld%lld",&l,&r);
for(int len=3;len<=17;len++)
{
for(int i=0;i<=9;i++)
{
for(int j=0;j<=9;j++)//单独的数
{
if(i==j) continue;
for(int k=1;k<=len;k++)//单独的数的位置
{
memset(a,-1,sizeof(a));
if(k==1&&j==0) continue;
a[k]=j;
if(check(i,len)) ans++;
}
}
}
}
printf("%d",ans);
return 0;
}
记得判重,用的map省心;
欢乐ABC——连续区间找相同的量
给你一个字符串,一个区间中A,B,C的数量如果相等,这样的区间的个数是多少,区间要连续;
数据范围1e6;
用前缀和记录ABC的个数;
如果a[j]-a[i-1]=b[j]-b[i-1],b[j]-b[i-1]=c[j]-c[i-1],即a[j]-b[j]=a[i-1]-b[i-1],b[j]-c[j]=b[i-1]-c[i-1],这样的区间i到j就是合法的;
(a[i]-b[i],b[i]-c[i])为一个元素,访问前方有多少相等的元素;
我们还可以再次转化,令A=1e7,B=-999999,C=-1;
用sum记录前缀和,再sort一遍,求相邻的星通的数;
因为排序过后,相邻的数如果相等,说明在这两个数之间A+B+C=0;也就是三个字符的数量相等;
#include<cstdio>
#include<map>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=1e6+10;
char s[maxn];
int a=10000000,b=-9999999,c=-1;
long long sum[maxn];
int ans;
int main()
{
scanf("%s",s);
int len=strlen(s);
for(int i=0;i<len;i++)
{
sum[i+1]=sum[i];
if(s[i]==‘A‘) sum[i+1]+=a;
else if(s[i]==‘B‘) sum[i+1]+=b;
else if(s[i]==‘C‘) sum[i+1]+=c;
}
sort(sum,sum+len+1);
int last=0;
for(int i=1;i<=len;i++)
{
if(sum[i]==sum[i-1])
{
ans+=i-last;
}
else last=i;
}
printf("%d",ans);
return 0;
}
打游戏
小强又双叒叕一天随手AK的ZROI的J转S模拟赛。AK完了的小强觉得OI太简单了,太没意思了,于是开始打起了更有挑战的游戏。
小强在游戏里打怪。有一次,他一下子遇到了 n 个怪物。 每个怪物有一个生命值,第 i个怪物的生命值是 hi。而小强除了生命值之外,还有一个属性是魔法值 m。
小强和怪物们依次行动。每一回合,小强先行动,然后怪物们同时行动。小强每次可以选择以下行动之一:
• 普通攻击:令某个怪物的生命值减少 1。
• 重击:消耗 1 魔法值,令某个怪物的生命值减少 2。
• 群体攻击:消耗 1 魔法值,令全体怪物的生命值减少 1。
而每个存活的怪物(生命值严格大于 0)每次会令小强的生命值减少 1。假设小强有足够的生命值来维持存活,小强想知道自己至少需要被消耗多少生命值才能击败所有怪物。
第一行为两个正整数 n 和 m。
第二行为 nn 个正整数,第 i 个数为 hi
以上是关于普转提——有趣的数,欢乐ABC,打游戏的主要内容,如果未能解决你的问题,请参考以下文章