社区讨论
30分求调
P8708[蓝桥杯 2020 省 A1] 整数小拼接参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mdrgg26g
- 此快照首次捕获于
- 2025/07/31 21:53 7 个月前
- 此快照最后确认于
- 2025/11/04 03:23 4 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
long long n,k,ans,a[N];
int solve(int n){
int cnt=1;
while(n){
n/=10;
cnt*=10;
}
return cnt;
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
int l=1,r=n;
while(l<=r){
int x=a[l]*solve(a[r])+a[r];
//当前拼好的数小于k
if(x<k){
ans+=r-l;
l++;
}
//当前拼好的数等于k
else if(x==k){
ans+=r-l;
l++,r--;
}
//当前拼好的数大于k
else{
r--;
}
}
l=1,r=n;
while(l<=r){
int x=a[r]*solve(a[l])+a[l];
//当前拼好的数小于k
if(x<k){
ans+=r-l;
l++;
}
//当前拼好的数等于k
else if(x==k){
ans+=r-l;
l++,r--;
}
//当前拼好的数大于k
else{
r--;
}
}
cout<<ans;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...