CF1895C

题目描述

给出 n n n 个长度最多为 5 5 5 的由 1 \texttt{1} 1 9 \texttt{9} 9 构成的字符串 s s s

求出有多少个 ( i , j ) (i,j) (i,j) 满足 s i + s j s_i+s_j si+sj 所形成的字符串长度为偶数,并且前半部分的数字之和等于后半部分的数字之和。

P.S:这里的加号表示字符串拼接。

分析

我们可以维护 n b r i , j nbr_{i,j} nbri,j 表示长度为 i i i,数字和为 j j j 的个数,并记录下来。

枚举时,先枚举幸运串长度,在枚举其中一个字符串(注意要从长度除以 2 2 2 开始)在枚举数字和,算出另一个字符串,统计答案,注意还要反着跑一边因为反着拼也是可以的。

答案初始值设为 n n n 因为每个字符串可以跟自己拼。

代码

#include <bits/stdc++.h>
#define int long long

using namespace std;

const int N = 2 * 1e5 + 5;
int n, a[N];
vector <int> nbr[10][55];

signed main(){
   
	cin >> n;
	for(int i = 1; i <= n; i ++){
   
		cin >> a[i];
		int len = 0, sum = 0, tmp = a[i];
		while(tmp){
   
			len ++;
			sum += tmp % 10;
			tmp /= 10;
		}
		nbr[len][sum].push_back(a[i]);
	}
	int ans = n;
	for(int len = 2; len <= 10; len += 2){
   
		for(int i = len / 2; i < len; i ++){
   
			int need = len - i;
			for(int sum = 0; sum <= 45; sum ++){
   
				for(int v : nbr[i][sum]){
   
					int sum1 = 0, sum2 = 0, tmp = v, now = 0;
					while(now < len / 2){
   
						sum1 += tmp % 10, now ++, tmp /= 10;
					}
					while(tmp){
   
						sum2 += tmp % 10, tmp /= 10;
					}
					ans += nbr[need][sum1 - sum2].size();
					if(i == len / 2){
   //因为自己跟自己拼已经算过了,所以要减一
						ans --;
						continue;//后面的反着跑一遍就不用做了
					}
					sum1 = sum2 = now = 0, tmp = v;
					while(now < i - len / 2){
   
						sum2 += tmp % 10, now ++, tmp /= 10;
					}
					while(tmp){
   
						sum1 += tmp % 10, tmp /= 10;
					}
					ans += nbr[need][sum1 - sum2].size();
				}
			}
		}
	}
	cout << ans;
	return 0;
}

相关推荐

  1. CF1895C

    2023-12-28 12:36:05       28 阅读
  2. 【学习笔记】CF1835C Twin Clusters

    2023-12-28 12:36:05       37 阅读
  3. CF1893C Freedom of Choice 题解

    2023-12-28 12:36:05       29 阅读
  4. CF1898B Milena and Admirer(贪心)

    2023-12-28 12:36:05       44 阅读
  5. CF1914C Quests

    2023-12-28 12:36:05       36 阅读
  6. CF1305C

    2023-12-28 12:36:05       38 阅读
  7. 题解:CF1922C(Closest Cities)

    2023-12-28 12:36:05       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-28 12:36:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-28 12:36:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-28 12:36:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-28 12:36:05       20 阅读

热门阅读

  1. 数字孪生在能源电力行业的技术难点和应用场景

    2023-12-28 12:36:05       37 阅读
  2. 设计模式_结构型模式_适配器模式

    2023-12-28 12:36:05       31 阅读
  3. Dubbo协议支持哪些协议?应用场景?

    2023-12-28 12:36:05       35 阅读
  4. 机器学习中异常值的处理方式

    2023-12-28 12:36:05       50 阅读
  5. 换页的算法以及例题

    2023-12-28 12:36:05       38 阅读
  6. 在Visual Studio(VS)编译器中,Release和Debug区别

    2023-12-28 12:36:05       37 阅读
  7. 【Web2D/3D】SVG(第二篇)

    2023-12-28 12:36:05       41 阅读
  8. *CSS: 级联样式表

    2023-12-28 12:36:05       35 阅读
  9. lodash源码分析每日一练 - 数组 - join

    2023-12-28 12:36:05       33 阅读
  10. Hive的视图和索引

    2023-12-28 12:36:05       41 阅读
  11. 31--设计模式、面向对象设计原则

    2023-12-28 12:36:05       31 阅读