#A. 最大回文数
Description
回文数指的是一个数字,从左到右读和从右到左读都一样。例如,1221 和 1234321 是回文数,1234 不是回文数。
现有 n 个正整数 ai (i=0,1,2,3,…..n-1),请找出其中最大的回文数。
Format
Input
输入文件的第一行只有一个正整数 n,代表正整数 ai 的个数。
接下来的 n 行,每行包含一个正整数 ai。输入保证一定有回文数。
Output
输出文件一行,一个正整数,即最大的回文数。
Samples
输入数据 1
3
4718
1221
121
Copy
输出数据 1
1221
Copy
输入数据 2
5
3944
953
8
75739
46
Copy
输出数据 2
8
Copy
Hint
【输入样例1说明】
回文数有 1221 和 121,最大的回文数是 1221。
【输入样例2说明】
回文数只有一个 8,因此最大的回文数就是 8。
【数据说明】
对于 30%的数据,1 ≤ n ≤ 100,1 ≤ ai ≤ 10^8。
对于 60%的数据,1 ≤ n ≤ 1000,1 ≤ ai ≤ 10^16。
对于 100%的数据,1<=N<=10000,1 ≤ ai ≤ 10^32。
可用string
#include<bits/stdc++.h>
using namespace std;
string num[10010];
bool cmp(string x,string y)
{
if(x.size()!=y.size())
return x.size()>y.size();
else
return x>y;
}
bool judge(string x)
{
for(int i=0,j=x.size()-1;i<=j;i++,j--)
if(x[i]!=x[j])
return false;
return true;
}
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
cin>>num[i];
sort(num+1,num+1+n,cmp);
for(int i=1;i<=n;i++)
if(judge(num[i])==true)
{
cout<<num[i];
return 0;
}
return 0;
}
#B. Splitting Pile
Description
小狸和浣熊制作了 N张卡,并堆积成一座山。卡片山上第 i 张卡片上写着整数 a_i。
小狸和浣熊决定分享 N 张卡。小狸从卡片山上,从上到下取了几张卡片后,浣熊会把剩下的全部卡片都取出来。此时,无论是小狸还是浣熊都必须取得 1 张以上的卡。
如果小狸和浣熊所持有的卡片上写着的数的总和分别为 x, y。求出 |x - y| 中可能值的最小值。
Input
第一行给出数字N
第二行给出N个数字
Output
输出一个答案
Samples
输入数据 1
6
1 2 3 4 5 6
Copy
输出数据 1
1
Copy
输入数据 2
2
10 -10
Copy
输出数据 2
20
Copy
Hint
-
2≤ N≤2×10^5
-
-10^9≤ a_i≤ 10^9
-
a_i是整数
#include<bits/stdc++.h>
using namespace std;
int n;
long long num[200010],tot[200010],ans=LONG_LONG_MAX;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&num[i]);
tot[i]=tot[i-1]+num[i];
}
for(int i=n-1;i>=1;i--)
ans=min(ans,abs(tot[n]-2*tot[i]));
printf("%lld",ans);
return 0;
}
#C. 频率排序器
题目描述
给你 �N 个小于等于 �C 的数字组成。
希望频率较高的数字出现在频率较低的数字之前。
给定任何两个数字 �x 和 �y,如果 �x 在原始序列中出现的次数大于 �y 出现的次数,则 �x 出现在 �y 之前。如果出现的次数相等,则输入中谁的值出现的早,谁就应该在排序后的序列中出现靠前。
输入格式
第一行,两个正整数 �,�N,C,含义见题目描述。
第二行,�N 个正整数 ��ai,表示消息。
输出格式
第一行,�N 个正整数,表示排序后的序列。
样例 #1
样例输入 #1
5 2
2 1 2 1 2
Copy
样例输出 #1
2 2 2 1 1
Copy
样例 #2
样例输入 #2
9 3
1 3 3 3 2 2 2 1 1
Copy
样例输出 #2
1 1 1 3 3 3 2 2 2
Copy
样例 #3
样例输入 #3
9 77
11 33 11 77 54 11 25 25 33
Copy
样例输出 #3
11 11 11 33 33 25 25 77 54
Copy
提示
数据规模及约定
对于 100%100% 的数据,1≤�≤1031≤N≤103,1≤�≤1091≤C≤109,1≤��≤�1≤ai≤C。
使用结构体,多重标准排序。
#include<bits/stdc++.h>
using namespace std;
int n,c,tot,num;
bool f;
struct inf
{
int v,cnt,fi;
}a[1010];
bool cmp(inf x,inf y)
{
return (x.cnt>y.cnt||(x.cnt==y.cnt&&x.fi<y.fi));
}
int main()
{
scanf("%d %d",&n,&c);
for(int i=1;i<=n;i++)
{
scanf("%d",&num);
f=false;
for(int j=1;j<=tot;j++)
if(a[j].v==num)
{
f=true;
a[j].cnt++;
break;
}
if(f==false)
{
tot++;
a[tot].v=num;
a[tot].fi=i;
a[tot].cnt=1;
}
}
sort(a+1,a+1+tot,cmp);
for(int i=1;i<=tot;i++)
for(int j=1;j<=a[i].cnt;j++)
printf("%d ",a[i].v);
return 0;
}