首页 > 其他分享 >P8708 [蓝桥杯 2020 省 A1] 整数小拼接 题解

P8708 [蓝桥杯 2020 省 A1] 整数小拼接 题解

时间:2023-07-17 14:13:06浏览次数:54  
标签:A1 ch return string int 题解 else 蓝桥 size

前言

传送门

blog

思路

这种选出两个数拼接在一起的题,一看就可以使用 two-point,我们使用 $l$ 和 $r$ 分别从最大的和最小的开始搜索,进行两次。

  1. 以 $l$ 为头,$r$ 为尾。

  2. 以 $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

相关文章

  • UVA10791 最小公倍数的最小和 Minimum Sum LCM 题解
    前言长沙市一中8机房0714模拟测1。传送门blog思路本题思路,首先我们先看$\operatorname{lcm}$,明显要使得这些数的$\operatorname{lcm}=n$那么我们就需要所有的数的质因子必须包含$n$的质因子。若$1\lea,b$,则$a\timesb\gea+b$,所以我们就有了策略。将同一个质因......
  • P9451 [ZSHOI-R1] 新概念报数 题解
    目录DescriptionSolutionCodeDescription在此题中,对于一个数\(x\),若\(\texttt{popcount}(x)\geq3\)(即\(x\)在二进制下\(\texttt{1}\)的个数大于等于三时),那它是非法的,否则其为合法的。给定\(T\)个数,如果当前的数\(x\)是非法的,则输出No,Commander,否则输出第一个大于......
  • requests.exceptions.ProxyError问题解决方法
    出现这个问题是因为你系统上在使用代理,然后你的代理又是规则匹配的。https://stackoverflow.com/questions/36906985/switch-off-proxy-in-requests-library3种解决方法:headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:109.0)Gecko/20100101Fi......
  • CF512D Fox And Travelling 题解--zhengjun
    计数好题。首先对于每个连通块独立考虑,最后合并答案。发现点数超过1的强连通分量一定删不掉。若连通块中存在点数超过1的强连通分量tarjan缩点之后,称这些点数超过1的强连通分量为关键点;那么两关键点之间的点也不能删;于是对于剩下的点直接dp即可,由于可删的子树......
  • 你省(福建)省队集训模拟赛题解
    Day5$\texttt{T1}$简要题意有两个正整数\(a<b\le10^9\),给出\(\dfrac{a}{b}\)的小数点后\(19\)位,要求还原\(a,b\),保证有解。solution一个科技:\(\texttt{Stern-Brocottree}(SBT)\),可以参考这个博客学习。先给出$O(n)$找的代码#include<bits/stdc++.h>#defineLL......
  • 洛谷-P9455 题解
    写在前面:本题蒟蒻给出两种做法,一种乱搞贪心(只是目前能过,若能被Hack请和我说),一种正解二分。正文1最坏时间复杂度:\(\mathcal{O}(n+\logV)(V=10^9)\)这个做法是很简单的,在此不多讲。只需要二分超频电压mid即可,若当前mid可行,则令右边界缩小至mid,否则令左边界扩大至mid。......
  • 230226题解
    A数列题目描述给定一个长为\(n\)的数列\(A_1,A_2,…,A_n\)。给出\(q\)次询问,每次询问给定\(X\),请你回答至少需要多少次操作,能够让数列中的每个数都变成\(X\)。每次操作你可以选择数列中的一个数加\(1\)或者减\(1\)。询问之间相互独立。输入格式第一行两个整数\(n,q\)。第......
  • 题解 HDU5726【GCD】/ LGT353762【Soso 的最大公约数】
    Problem给你一个长为\(N(1\leqN\leq1\times10^5)\)的整数序列:\(a_{1},\cdots,a_{n}(0<a_{i}\leq1\times10^9)\)。有\(Q(1\leqQ\leq1\times10^5)\)次提问。每次提问有个范围\(l,r\),你需要计算出\(\gcd(a_{l},,a_{l+1},...,a_{r})\),并且统计数对\((l’,r’......
  • Codeforces Round 896 Div2 A-D题解
    CodeforcesRound896A.Politics这题问的是,给一些人的在n个议题的观点,然后你可以随意安排顺序,每个议题人多的赢,反对派会离开,问随便安排议题,最多留下多少人,包括我自己这个题刚开始愣了半天,但是想到,那只要把所有和我观点一致的给留下来不就行了???然后交上去就AC了ACCode#inclu......
  • 题解 CF1842H【Tenzing and Random Real Numbers】
    看了题解。好难受,想用积分求概率,算了半天。发现没啥规律,不是不能算,就是太可怕了。Problem有\(n\)个\([0,1]\)范围内的均匀随机变量\(x_{1\cdotsn}\)和\(m\)条限制,每条限制形如\(x_i+x_j\le1\)或\(x_i+x_j\ge1\)。请你求出所有限制均满足的概率。对\(998244353\)......