【Tisinsen1043】完美的代价(字符串+树状数组)
来源:互联网 发布:闪电网络 中转交易 编辑:程序博客网 时间:2024/06/03 20:30
题目:
我是超链接
题解:
检验是否Impossible就是每个字母出现偶数次,如果字符串为奇数个,那么只允许一个字母为奇数
然后呐?我们先把样例字符串编号为12345(mamad),然后把它倒过来,并且如果有重复字母就按照第一次出现的编号,52143(damam)
然后就可以发现这个东西求一个逆序对再/2就对了呐
代码:
#include <cstdio>#include <cstring>using namespace std;char st[8005];int st1[8005],cc[8005],num[30][8005],pe[30],a[8005],n,c[8005];void add(int loc,int value){int i;for (i=loc;i<=n;i+=i&(-i)) c[i]+=value;}int qurry(int loc){int i,ans=0;for (i=loc;i>0;i-=i&(-i)) ans+=c[i];return ans;}int main(){int i,now;scanf("%d%s",&n,&st);int k=0;for (i=n-1;i>=0;i--) st1[k++]=st[i]-'a';k--;for (i=0;i<n;i++) { now=st[i]-'a'; cc[now]++; num[now][++pe[now]]=i+1; }bool ff=true;for (i=0;i<26;i++) if (cc[i]%2!=0) { if (n%2!=0 && ff) ff=false; else {printf("Impossible");return 0;} }memset(pe,0,sizeof(pe));int ans=0;for (i=0;i<n;i++) a[i+1]=num[st1[i]][++pe[st1[i]]]; for (i=1;i<=n;i++) { add(a[i],1); ans+=a[i]-qurry(a[i]-1)-1; }ans/=2;printf("%d",ans);}
0 0
- 【Tisinsen1043】完美的代价(字符串+树状数组)
- 【Tisinsen1043】完美的代价(字符串+树状数组)
- 回文字符串 (完美的代价 蓝桥杯)
- 基础练习 完美的代价(蓝桥杯 字符串问题)
- 完美的代价——回文字符串
- 蓝桥杯练习(vip) 完美的代价
- 蓝桥杯 基础训练 完美的代价(转)
- [Tsinsen1043]完美的代价(逆序对)
- 完美的代价解答
- 完美的代价
- 12.完美的代价
- 蓝桥杯 完美的代价
- 完美的代价-题解
- 完美的代价
- 完美的代价
- 完美的代价
- 完美的代价
- 完美的代价
- [wiki]windows下重新编译OpenCV 及其附加库 opencv_contrib, 生成Python接口
- mysql创建远程访问用户
- 基于AMTE2的4个site loadboard板硬件设计
- Memcache和Memcached在Linux环境下的安装过程
- 使用TextureView setTransform(Matrix)方法,解决Camera显示变形问题
- 【Tisinsen1043】完美的代价(字符串+树状数组)
- CAN与CANOpen(四)
- Qt中的智能指针
- linux 配置ssh 登录
- mysql中GROUP BY结合GROUP_CONCAT的使用
- hdu 2732 Leapin' Lizards 【图论-网络流-最大流】
- 每日一练之Reverse Integer[LeetCode No.7]-翻转整数
- windows下用批处理设置设置环境变量 .
- http对接url传上传下载数据