题目链接:点击查看

题目大意:给出一个长度为 nnn 的字符串,每个字符串实质上代表一个数字,例如:a=20,b=21,⋯,z=225a=2^0,b=2^1,\cdots,z=2^{25}a=20,b=21,⋯,z=225,现在需要寻找一种递归顺序,使得每个位置非负即正,递归规则如下:
f(S)=−f(S[1,m])+f(S[m+1,∣S∣])f(S) = -f(S[1, m]) + f(S[m + 1, |S|]) f(S)=−f(S[1,m])+f(S[m+1,∣S∣])
其中 mmm 是 [l,r][l,r][l,r] 中任意一个位置

现在问能否通过某种递归顺序,使得整个序列之和为给定的值 sumsumsum

题目分析:结论:第 nnn 个位置的符号一定为正,第 n−1n-1n−1 个位置的符号一定为负,其余 n−2n-2n−2 个位置的符号随意

简单证明,用数学归纳法,设最终的符号位为 a1,a2,⋯,ana_1,a_2,\cdots,a_na1​,a2​,⋯,an​,其中 ai=−1a_i=-1ai​=−1 或 ai=1a_i=1ai​=1:

  1. 当 n=2n=2n=2 时:显然左边为 −1-1−1,右边为 111(唯一确定)
  2. 当 n>2n>2n>2时:
    1. 假设要使左边第一个为 −1-1−1,递归处理 (−a1)(a2,a3,⋯,an)(-a_1)(a_2,a_3,\cdots,a_n)(−a1​)(a2​,a3​,⋯,an​) 即可
    2. 假设要使左边第一个为 111,找到从左边开始的第一个负数记为 iii,即满足 ai−1=1a_{i-1}=1ai−1​=1,ai=−1a_i=-1ai​=−1,则递归子问题 (−a1,−a2,⋯,−ai−1,−ai)(ai+1,⋯,an)(-a_1,-a_2,\cdots ,-a_{i-1},-a_i)(a_{i+1},\cdots ,a_n)(−a1​,−a2​,⋯,−ai−1​,−ai​)(ai+1​,⋯,an​),这样 aia_iai​ 最后一定是 −1-1−1,且 a1,a2,⋯,ai−1a_1,a_2,\cdots,a_i-1a1​,a2​,⋯,ai​−1 都可以继续递归变成正数

代码:

// #pragma GCC optimize(2)
// #pragma GCC optimize("Ofast","inline","-ffast-math")
// #pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<unordered_map>
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
template<typename T>
inline void read(T &x)
{T f=1;x=0;char ch=getchar();while(0==isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(0!=isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();x*=f;
}
template<typename T>
inline void write(T x)
{if(x<0){x=~(x-1);putchar('-');}if(x>9)write(x/10);putchar(x%10+'0');
}
const int inf=0x3f3f3f3f;
const int N=1e6+100;
char s[N];
int n,cnt[N];
LL f[N],sum;
void init()
{f[0]=1;for(int i=1;i<26;i++) f[i]=f[i-1]*2;
}
int main()
{#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);init();read(n),read(sum);scanf("%s",s+1);sum-=f[s[n]-'a']-f[s[n-1]-'a'];for(int i=1;i<=n-2;i++) sum+=f[s[i]-'a'],cnt[s[i]-'a']++;for(int i=25;i>=0;i--) while(cnt[i]&&sum>=2*f[i]) sum-=2*f[i],cnt[i]--;puts(sum?"No":"Yes");return 0;
}

CodeForces - 1465E Poman Numbers(推公式+贪心)相关推荐

  1. 【CodeForces - 746E】Numbers Exchange(贪心构造)

    题干: Eugeny has n cards, each of them has exactly one integer written on it. Eugeny wants to exchange ...

  2. LC1665. 完成所有任务的最少初始能量(推公式贪心)

    题目地址 假设当前最少能完成所需的能量为P. 且:当前任务的序列为(a1,m1) - (a2,m2)-(an,mn) 则 p >= m 1 m_1 m1​ p >= a 1 a_1 a1​ ...

  3. ACM - 贪心 - 基础(区间问题 + Huffman树 + 排序不等式 + 绝对值不等式 + 推公式)

    贪心 经典母题 1.区间问题 AcWing 905. 区间选点 AcWing 908. 最大不相交区间数量 AcWing 906. 区间分组 AcWing 907. 区间覆盖 2.Huffman树 A ...

  4. CodeForces - 466C Number of Ways(推公式/dp)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列,现在要求出满足条件的 ( i , j ) 的匹配数量,满足: 题目分析:训练时推的公式,简单说一下吧,维护前缀和 sum,则确定两个断点 ( ...

  5. 贪心算法_排队不等式_绝对值不等式_推公式

    文章目录 排队不等式 原题链接 题目大意: 思路: 证明: 代码: 绝对值不等式 原题链接 题目大意: 思路: 证明: 代码: 推公式 原题链接 题目大意 思路: 证明: 代码: 排队不等式 原题链接 ...

  6. 【算法基础26】贪心下——哈夫曼树、排序不等式、绝对值不等式、推公式的思路与应用

    一.合并果子(哈夫曼树) 题目描述:给出n堆不同种类的果子,每堆果子的数量不同,每个果子的重量为1.每次只能合并相邻堆的果子,且花费的体力是果子的重量和.将所有果子合并成一堆,求最小的体力花费. 问题 ...

  7. 贪心---排序不等式、绝对值不等式、推公式

    1.排序不等式 1.1排队打水 #include<iostream> #include<algorithm> #include<cstring> using nam ...

  8. 贪心(二):排序不等式、绝对值不等式、推公式

    排序不等式 例题:排队打水 有 n 个人排队到 1 个水龙头处打水,第 i 个人装满水桶所需的时间是 titi,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小? 输入格式 第一行包含整数 n ...

  9. 算法基础之贪心:排序不等式、绝对值不等式、推公式

    文章 1.排序不等式 1.1.排队打水 2.绝对值不等式 2.1.货仓选址 3.推公式 3.3.耍杂技的牛 1.排序不等式 1.1.排队打水 #include <iostream> #in ...

最新文章

  1. 正则式高人谈解答正则式的心得
  2. 2021年洛谷一月月赛(Div1、Div2,6题)全部题解
  3. largest-rectangle-in-histogram
  4. 【chainer速成】chainer图像分类从模型自定义到测试
  5. Java删除properties配置文件中指定键值的代码
  6. drawrect java_对于drawRect使用,谨慎使用!
  7. phpstudy mysql优化_MySQL_MySQL优化之对RAND()的优化方法,众所周知,在MySQL中,如果直 - phpStudy...
  8. 复习Linux基本操作----常见指令
  9. 如何查看一个组件的 classid是多少_如何查看iphone电池使用次数?6s电池容量多少需要更换?...
  10. 【C语言】scanf()输入浮点型数据
  11. dns 修改html,CentOS 8 修改 DNS
  12. Ubuntu / Debian / Deepin等 Sublime Text 3 配置C++环境(一键编译运行,格式化代码)
  13. 支持向量机SVM的学习笔记
  14. 破译密码、设计飞机和建设团队:Randy Shoup谈高绩效团队
  15. Vue:Vue项目中引入第三方库报错Unexpected token ‘<‘
  16. CodeBlocks常用操作快捷键
  17. html5视频播放,实现防止下载(一)
  18. AutoRobot微信/QQ定时自动发
  19. XX公司信息化建设草案
  20. 如何组织一个高效的开发团队?

热门文章

  1. 用c语言实现随机无向图的生成,C ++程序为给定数量的边生成随机无向图
  2. Nacos源码主动健康检测
  3. SpringSecurity权限管理相关对象介绍
  4. 通过Nginx简单安装
  5. JWT令牌组成和安全校验讲解
  6. 字符输出流_Writer类FileWriter类介绍
  7. 数据库-数据库的常用术语
  8. spring事务管理-xml配置aop事务(重点)
  9. fputc会覆盖吗_墨粉寿命和打印的文件有关系吗?
  10. mysql主从同步测试_mysql 主从同步测试