A. Sum of Round Numbers
题意:给定一个数,要你这个数拆分成若干个数相加,每个数最多包含一个非0的数且在最高位.
水题,直接分离各位数即可
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define RG register int
#define ULL unsigned long long
int main()
{
int T;
cin>>T;
while(T--){
int num;
cin>>num;
int a[10]={0};
int cnt=0;
int p=10;
while(num){
a[cnt++]=num%p;
num/=p;
}
int cc=0;
for(int i=0;i<cnt;i++){
if(a[i]!=0)cc++;
}
cout<<cc<<endl;
for(int i=0;i<cnt;i++){
if(a[i]!=0){cout<<a[i];for(int j=1;j<=i;j++)cout<<"0";cout<<" ";}
}
cout<<endl;
}
return 0;
}
B. Same Parity Summands
题意:给两个整数
n
,
k
n,k
n,k让你给
n
n
n拆分成k各数,要求是才分后的数要么全部位奇数,要么全部为偶数。
分类套讨论:
前提要求:
k
<
=
n
k<=n
k<=n
- n n n奇, k k k奇:至少可以拆成 k − 1 k-1 k−1 个 1 1 1(奇数) 和 n + 1 − k n+1-k n+1−k( n , k n,k n,k为奇数, n − k n-k n−k为偶 + 1 +1 +1 为奇数)
- n n n奇, k k k偶:假设按照1)的拆分方法, k − 1 k-1 k−1个 1 和 k − n + 1 1 和 k-n+1 1和k−n+1(为偶数)不满足,全偶数情况: k − 1 个 2 k-1个2 k−1个2 和 ( n − 2 ∗ k + 2 ) (n-2*k+2) (n−2∗k+2)(奇数) 无法拆解
- n n n 偶, k k k偶:同情况一。
- n n n 偶, k k k奇 尝试拆分一个奇数 1 然后转化为情况2显然否决; 考虑全偶 k − 1 个 2 k-1个2 k−1个2 和 ( n − 2 ∗ k + 2 ) (n-2*k+2) (n−2∗k+2)(偶数)且必须满足 ( n − 2 ∗ k + 2 ) > = 2 (n-2*k+2)>=2 (n−2∗k+2)>=2即: n > = 2 ∗ k n>=2*k n>=2∗k
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define RG register int
#define ULL unsigned long long
int main()
{
int T;
cin>>T;
while(T--){
int n,k;
cin>>n>>k;
if(n<k){cout<<"NO\n";continue;}
if(n%2){
if(k%2){
cout<<"YES\n";
for(int i=1;i<=k-1;i++)cout<<"1 ";
cout<<n+1-k;
}
else cout<<"NO";
}
else{
if(k%2){
if(2*k<=n){
cout<<"YES\n";
for(int i=1;i<=k-1;i++)cout<<"2 ";
cout<<n-2*k+2;
}
else cout<<"NO";
}
else{
cout<<"YES\n";
for(int i=1;i<=k-1;i++)cout<<"1 ";
cout<<n-k+1;
}
}
cout<<endl;
}
return 0;
}
C. K-th Not Divisible by n
直接推公式
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define RG register int
#define ULL unsigned long long
int main()
{
int t;
cin>>t;
while(t--){
LL k,n;
cin>>k>>n;
LL a=(n/(k-1)*k);
LL b=n%(k-1);
if(b==0)a--;
else a+=b;
cout<<a<<endl;
}
return 0;
}
D. Alice, Bob and Candies
模拟题,直接模拟即可
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define RG register int
#define ULL unsigned long long
int a[1010];
int main()
{
int T;
cin>>T;
while(T--){
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int A=1,B=n,M_A=0,M_B=0,cnt=0;
int P_A=-1,P_B=-1;//前一轮糖果
while(1){
//Alice:
int sumA=0;
while(1){
sumA+=a[A++];
if(sumA>P_B||A>B)break;
}
P_A=sumA;M_A+=sumA;
cnt++;
if(A>B)break;
int sumB=0;
while(1){
sumB+=a[B--];
if(sumB>P_A||A>B)break;
}
P_B=sumB;M_B+=sumB;
cnt++;
if(A>B)break;
}
cout<<cnt<<" "<<M_A<<" "<<M_B<<endl;
}
return 0;
}
总结