题解 CF160B 【Unlucky Ticket】

  1. 思路

这道题应该怎么做?

可以把输入的数字逐位拆分后存入数组,就像这样存进去:

int a[N],b[N]
tmp=n;
k=1;
while(--tmp){
	a[k]=s%10
	s/=10;
	k++;
}
tmp=n;
k=1;
while(--tmp){
	b[k]=s%10
	s/=10;
	k++;
}

当然也可以用字符串进行存储,把字符转数字即可:

for(int i=1;i<=n;i++) a[i]=s[i-1]-48;
for(int i=n+1;i<=2*n;i++) b[i-n]=s[i-1]-48;//48=='0',应该都明白这样转换
  1. 为什么需要排序(上面没有打出来)

因为要较小的数对应较小的,较大的对应较大的,有点类似于贪心的思想。

  1. 判断

有对应位置上的数相等的:直接输出 NO

如果有两个位置与其对应的数(不能是同一个位置)大小关系不相同, 输出 NO

否则就输出 YES

The End.

赞赏