比赛
难得一见div4的场.也是第一次体会到了AK的快乐(虽然打的是virtual).难度应该在div2的ABC吧.码风以暴力为主.
A - Sum of Round Numbers
题目大题:给一个数,把每一位拆出来.
比如5423拆成 5000 400 20 3
就拆就完事了…
代码
#pragma GCC optimize(3)
#define LL long long
#define pq priority_queue
#define ULL unsigned long long
#define pb push_back
#define mem(a,x) memset(a,x,sizeof a)
#define pii pair<int,int>
#define pll pair<long long,long long>
#define pdd pair<double,double>
#define db double
#define fir(i,a,b) for(int i=a;i<=b;++i)
#define afir(i,a,b) for(int i=a;i>=b;--i)
#define ft first
#define vi vector<int>
#define sd second
#define ALL(a) a.begin(),a.end()
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
const int mod = 9901;
inline int read(){
int x = 0,f=1;char ch = getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){
x=x*10+ch-'0';ch=getchar();}
return x*f;
}
void write(int k) {
if (k < 0)
putchar('-'), k = -k;
if (k >= 10)
write(k / 10);
putchar(k % 10 + '0');
}
int f[5] = {
1,10,100,1000,10000};
int main(){
int t;
cin >> t;
while(t--){
int n;
cin >> n;
int tn = n;
int cnt= 0;
int ans = 0;
while(tn){
if(tn%10) ans++;
tn/=10;
cnt++;
}
int i = 0;
cout <<ans << endl;
while(n){
if(n%10){
cout << n%10*f[i] << " ";
}
n/=10;
i++;
}
cout << endl;
}
return 0;
}
B - Same Parity Summands
题目大意:给一个n和k 只能用k个奇数或者偶数去凑n.可以重复选同一个数字.
有两种无解的情况
第一种:n是奇数,k是偶数 这种是一定无法解决的.
第二种:如果我们用奇数去凑肯定尽量先用1去凑.如果说n < k的话就凑不出来,偶数同理.
代码
#pragma GCC optimize(3)
#define LL long long
#define pq priority_queue
#define ULL unsigned long long
#define pb push_back
#define mem(a,x) memset(a,x,sizeof a)
#define pii pair<int,int>
#define pll pair<long long,long long>
#define pdd pair<double,double>
#define db double
#define fir(i,a,b) for(int i=a;i<=b;++i)
#define afir(i,a,b) for(int i=a;i>=b;--i)
#define ft first
#define vi vector<int>
#define sd second
#define ALL(a) a.begin(),a.end()
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
const int mod = 9901;
inline int read(){
int x = 0,f=1;char ch = getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){
x=x*10+ch-'0';ch=getchar();}
return x*f;
}
void write(int k) {
if (k < 0)
putchar('-'), k = -k;
if (k >= 10