一、题目
二、分析
先样例分析一下:小于30的数对有:(1,11),(2,22),(12,21)。
再看一下数据,于是就发现了10的7次方不能暴力,然后看了一下题解想了一下,原来可以用二进制表示构成该数的各位数,也就是用0来或运算,然后碰到一样的就更新答案。
三、代码
#include<bits/stdc++.h>
using namespace std;
char a[100005];
int b[100005],ans[100005];
int tot=1;
int main(){
gets(a);
int len = strlen(a);
for(int i=1;i<=len;i++) b[i]=a[i-1]-'0';
ans[1]=b[1];
for(int i=2;i<=len;i++){
if(b[i]>=ans[tot]) ans[++tot] = b[i];
else{
int t = b[i];
int temp = upper_bound(ans+1,ans+1+tot,t)-ans;
ans[temp]= b[i];
}
}
cout<<len-tot;
return 0;
}