赛时战绩:
两位大佬朋友赛时战绩(差距太明显了)
令 \(a*10^b\) 为 \(round number\) , \(T\) 次询问,每次输入 \(n\) ,求 \(n\) 最少要用几个 \(round number\) 的和来表示,输出要用几个数以及每个数的值。
最少个数一定为\(n\)的每位不为\(0\)个数,所以计数一下即可。
每个值就是当前位置上的数,补相应的$0$即可。
说句闲话:我真是傻到家了,刚开始还傻傻的求\(n\)的位数......
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
using namespace std;
int T,len;
string n;
int main()
{
cin>>T;
while(T--)
{
cin>>n;
len=n.length();
int cnt=0;
for(int i=0;i<len;i++)
{
if(n[i]!=‘0‘)
cnt++;
}
cout<<cnt<<endl;
for(int i=0;i<len;i++)
{
if(n[i]!=‘0‘)
{
cout<<n[i];
for(int j=1;j<=len-i-1;j++)
cout<<"0";
cout<<" ";
}
}
cout<<endl;
}
return 0;
}
\(T\) 次询问,每次输入 \(n\) ,\(k\),把 \(n\) 拆成 \(k\) 份,要求每份都为奇数或都为偶数,无解输出\(-1\)。
蛮分是不行的,考虑前 \(k-1\) 个数,根据题意,可以全为 \(1\) 或全为 \(2\) 。
把剩下的堆在最后一个数上,判断一下剩下的数是否大于 \(0\),然后如果前面全为 \(1\) 时,\(n-k+1\) 是否为奇数,全为 \(2\) 时,判断\(n-2*(k-1)\) 是否为偶数即可。
QAQ
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
using namespace std;
const int N=105;
int T,n,k,a[N];
int main()
{
cin>>T;
while(T--)
{
cin>>n>>k;
memset(a,0,sizeof a);
if((n-k+1)%2==1&&(n-k+1)>0)
{
cout<<"YES"<<endl;
for(int i=1;i<=k-1;i++)
{
cout<<"1"<<" ";
}
cout<<n-k+1<<endl;
}
else if((n-2*(k-1))%2==0&&(n-2*(k-1))>0)
{
cout<<"YES"<<endl;
for(int i=1;i<=k-1;i++)
{
cout<<"2"<<" ";
}
cout<<n-2*(k-1)<<endl;
}
else
cout<<"NO"<<endl;
}
return 0;
}
\(T\) 次询问,每次询问不被 \(n\) 整除的第 \(k\) 个数是多少。
Codeforces Round #640 (Div. 4)
原文:https://www.cnblogs.com/pjxpjx/p/12862956.html