站外题求debug,90pts
  • 板块题目总版
  • 楼主Dark_Star
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/4 20:51
  • 上次更新2023/12/5 09:39:48
查看原帖
站外题求debug,90pts
1118893
Dark_Star楼主2023/12/4 20:51

问题描述:

给出 nn 个正整数 aia_i ,从中选出 kk 个数,求出这 kk 个数的和。

问:所有的和中,有多少个互不相同的回文数,并从小到大输出这些为回文数的和。

输入描述:

第 11 行两个正整数 nn 和 kk ,

第 22 行 nn 个正整数 aia_i 。

输出描述:

第 11 行一个整数 ansans ,表示互不相同的回文数一共有多少个。

第 22 行有 ansans 个从小到大的回文数。

输入样例:

4 2
3 4 5 6

输出样例:

4
7 8 9 11

数据范围:

30%30\% 的数据: n≤10,k=2n \le 10,k = 2 ;

80%80\% 的数据: n≤20,k≤10n \le 20,k \le 10 ;

100%100\% 的数据: n≤26,k≤n,sum≤2×109n \le 26,k \le n,sum \le 2 \times 10^9

(sumsum指所有数字之和)

下面是我的代码:

#include<bits/stdc++.h>
using namespace std;
int n,k,a[27],s[100001],ans;
bool hws(int n){
	int m=0,ans=n;
	for(;n;n/=10)m=(m<<1)+(m<<3)+n%10;
	return ans==m;
}
void dfs(int now,int sum,int last){
	if(now>k){
		if(hws(sum))s[++ans]=sum;
		return;
	}
	for(int i=last+1;i<=n;i++)dfs(now+1,sum+a[i],i);
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++)cin>>a[i];
	dfs(1,0,0);
	sort(s+1,s+ans+1);
	int answer=unique(s+1,s+ans+1)-s-1;
	cout<<answer<<endl;
	for(int i=1;i<=answer;i++)cout<<s[i]<<' ';
	return 0;
}

TLE 了最后一个测试点,有谁帮我优化一下代码?

2023/12/4 20:51
加载中...