前言
思路
这种选出两个数拼接在一起的题,一看就可以使用 two-point,我们使用 $l$ 和 $r$ 分别从最大的和最小的开始搜索,进行两次。
-
以 $l$ 为头,$r$ 为尾。
-
以 $r$ 为头,$l$ 为尾。
如何比较大小呢?我们可以先去做宇宙总统这道题。
首先排序的 $cmp$:
bool cmp(string x,string y){
if(x.size() != y.size())return x.size() < y.size();
else return x < y;
}
然后是比较拼接的数的大小的 $check$:
int check(string x,string y){
if(x == y)return -1;
else return cmp(x,y);
}
这样我们就可以完成排序与比大小了。
AC Code
#include <bits/stdc++.h>
using namespace std;
string a[100010];
bool cmp(string x,string y){
if(x.size() != y.size())return x.size() < y.size();
else return x < y;
}
int check(string x,string y){
if(x == y)return -1;
else return cmp(x,y);
}
int main(){
int n;
string k;
cin>>n>>k;
for(int i = 1;i <= n;i++){
cin>>a[i];
}
sort(a + 1,a + 1 + n,cmp);
int l = 1,r = n;int ans = 0;
while(l < r){
int ch = check(a[r] + a[l],k);
if(ch == -1){
ans += r - l;
l++,r--;
}else
if(ch == 1){
ans += r - l;
l++;
}else{
r--;
}
}
l = 1,r = n;
while(l < r){
int ch = check(a[l] + a[r],k);
if(ch == -1){
ans += r - l;
l++,r--;
}else
if(ch == 1){
ans += r - l;
l++;
}else{
r--;
}
}
cout<<ans;
}
标签:A1,ch,return,string,int,题解,else,蓝桥,size
From: https://www.cnblogs.com/JJL0610/p/17559925.html