Codeforces Round #742 (Div. 2)题解

链接
\(A,B\)题签到,就完了。
\(C\)题,考虑进位时多进一位,由于是隔一位进的,所以可以发现奇数位和偶数位是相互独立的,那么我们就把奇数位和偶数位单独拉出来组成数字例如:34789,我们单独拉出来的奇数位为:379,单独拉出来的偶数位为48,这样的话我们再将这两个数按照十进制算法正常相加的个数即可。考虑一个数\(x\),若两个有序实数对相加的个数为\(x+1\),那我们最终的答案就是\((x_奇+1)\times(x_偶+1)-2\),因为最后的数不能拆成(n,0)和(0,n),除去这两种。

//不等,不问,不犹豫,不回头.
#include<bits/stdc++.h>
#define _ 0
#define ls p<<1
#define db double
#define rs p<<1|1
#define P 1000000007
#define ll long long
#define INF 1000000000
#define get(x) x=read()
#define PLI pair<ll,int>
#define PII pair<int,int>
#define ull unsigned long long
#define put(x) printf("%d\n",x)
#define putl(x) printf("%lld\n",x)
#define rep(x,y,z) for(int x=y;x<=z;++x)
#define fep(x,y,z) for(int x=y;x>=z;--x)
#define go(x) for(int i=link[x],y=a[i].y;i;y=a[i=a[i].next].y)
using namespace std;

inline int read()
{
    int x=0,ff=1;
    char ch=getchar();
    while(!isdigit(ch)) {if(ch=='-') ff=-1;ch=getchar();}
    while(isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    return x*ff;
}

int main()
{
    //freopen("1.in","r",stdin);
	int get(T);
	while(T--)
	{
		int get(n);
		ll x1=0,x2=0;
		int s=1e9;
		rep(i,1,10)
		{
			if(i%2==1) x1=x1*10+n/s;
			else x2=x2*10+n/s;
			n%=s;s/=10;
		}
		putl((x1+1)*(x2+1)-2);
	} 
    return (0^_^0);
}
//以吾之血,铸吾最后的亡魂.

关于\(D\)题,
简化题意就是给定你一个数字\(s\)\(n\),让你构造一个长度为\(n\)的序列,使得序列中的元素和为\(s\)。并且使得这个序列中的元素转化为\(11\)进制后的和最大。
发现我们最优的情况就是使得拆开后的数字在各个数位上相加任然和原数相等,但若不等的话,我们只能将拆开了。贪心的从低位向高位拆就行。

//不等,不问,不犹豫,不回头.
#include<bits/stdc++.h>
#define _ 0
#define ls p<<1
#define db double
#define rs p<<1|1
#define P 1000000007
#define ll long long
#define INF 1000000000
#define get(x) x=read()
#define PLI pair<ll,int>
#define PII pair<int,int>
#define ull unsigned long long
#define put(x) printf("%d\n",x)
#define putl(x) printf("%lld\n",x)
#define rep(x,y,z) for(int x=y;x<=z;++x)
#define fep(x,y,z) for(int x=y;x>=z;--x)
#define go(x) for(int i=link[x],y=a[i].y;i;y=a[i=a[i].next].y)
using namespace std;
ll p[20];

inline int read()
{
    int x=0,ff=1;
    char ch=getchar();
    while(!isdigit(ch)) {if(ch=='-') ff=-1;ch=getchar();}
    while(isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    return x*ff;
}

int main()
{
	//freopen("1.in","r",stdin);
	int get(T);
	while(T--)
	{
		ll get(s),get(n);
		ll now=s,cnt=0;
		rep(i,1,10)
		{
			p[i]=now%10;
			now/=10;
			cnt+=p[i];
		}
		while(cnt<n)
		{
			rep(i,2,10)
			{
				if(p[i])
				{
					p[i]--;
					p[i-1]+=10;
					cnt+=9;
					break;
				}
			}
		}
		ll pz=1;n--;
		rep(i,1,10)
		{
			rep(j,1,min(n,p[i])) printf("%lld ",1*pz);
			s-=min(n,p[i])*pz;n-=min(n,p[i]);
			pz*=10;
		}
		printf("%lld\n",s);
	}
    return (0^_^0);
}
//以吾之血,铸吾最后的亡魂.

posted @ 2021-09-06 13:24  逆天峰  阅读(135)  评论(0编辑  收藏  举报
作者:逆天峰
出处:https://www.cnblogs.com/gcfer//