小孩的游戏

就是按要求排,然后输出,只要弄懂优先级别就好了,肯定先比十位数,然后比个位,但是个位数的优先度不一样,比如3,是和33的优先度一样的

桶排做法

#include<bits/stdc++.h>
using namespace std;
#define sf scanf
#define scf(x) scanf("%d",&x)
#define pf printf
#define prf(x) printf("%d\n",x)
#define mm(x,b) memset((x),(b),sizeof(x))
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=a;i>=n;i--)
typedef long long ll;
const ll mod=1e9+100;
const double eps=1e-8;
using namespace std;
const double pi=acos(-1.0);
const int inf=0xfffffff;
const int N=1e5;
int a[105];
void read(int &x)
{
    int f=1;x=0;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
    while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
    x*=f;
}
void print(int x)
{
    if(x<0)//负数
    {
        putchar('-');
        x=-x;
    }
    if(x>9)
        print(x/10);
    putchar(x%10+'0');
}
int main()
{
	int n, x;
	read(n);
	rep(i,0,n)
	{
		read(x);
		a[x]++;
	}
	per(i,99,10)
	{
		while(a[i]--)
		{
			print(i);
		}
		if((i%10)==i/10)
		{
			while(a[i/10]--)
			print(i/10);
		}
	}
	while(a[100]--)
	print(100);
	while(a[0]--)
	print(0);
	return 0;
}

用优先队列的,这个和sort类似

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include <iomanip>
#include<cmath>
#include<float.h> 
#include<string.h>
#include<algorithm>
#define sf scanf
#define scf(x) scanf("%d",&x)
#define pf printf
#define prf(x) printf("%d\n",x)
#define mm(x,b) memset((x),(b),sizeof(x))
#include<vector>
#include<queue>
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=a;i>=n;i--)
typedef long long ll;
const ll mod=1e9+100;
const double eps=1e-8;
using namespace std;
const double pi=acos(-1.0);
const int inf=0xfffffff;
const int N=1e6+5;
struct node
{
	int x;
	int a[3]; 
	node(int k=0)
	{
		x=k;
		if(k==0)
		{
			a[0]=a[1]=a[2]=0;
		}else if(k<10)
		{
			a[1]=a[2]=a[0]=k;
		}else if(k==100)
		{
			a[0]=1;
			a[1]=a[2]=0;
		}else
		{
			a[1]=k%10;
			a[2]=a[0]=k/10;
		}
	}
	friend bool operator <(node x,node y)
	{
		if(x.a[0]!=y.a[0])
		return x.a[0]<y.a[0];
		if(x.a[1]!=y.a[1])
		return x.a[1]<y.a[1];
		if(x.a[2]!=y.a[2])
		return x.a[2]<y.a[2];
	}
};
priority_queue<node> v;
int main()
{
	int n;scf(n);
	while(n--)
	{
		int x;scf(x);
		v.push(node(x)); 
	}
	node t;
	while(!v.empty())
	{
		t=v.top();v.pop();
		pf("%d",t.x);
	}
	return 0;
}
posted @ 2018-12-08 12:28  一无所知小白龙  阅读(343)  评论(0编辑  收藏  举报