OVO——扶咕咕的20道CF
OVO——扶咕咕的20道CF
CF1352A Sum of Round Numbers
题意描述
一个正整数,如果它的形式像 d0000...00d0000...00 一样,那么就称它为“圆数”,换句话说,“圆数”除了最高位其它的数位都是 00 ,特别地,正整数1\sim91∼9都是“圆数”
举例来说,4000,1,9,800,904000,1,9,800,90都是“圆数”,而110,707,222,1001110,707,222,1001不是“圆数”
给你一个正整数 nn , 找出若干个“圆数”,使“圆数”的数量尽可能少,且它们的和等于 nn。
解:直接模拟即可
圆数=按位分离
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <queue>
#define INF 525525
#include <vector>
using namespace std;
int t,n,ans;
bool sol(int n){
int ans=0;
while(n){
int n0=n,tep=10;
while(n0%10==0){
tep*=10;
n0/=10;
}
cout<<n%tep<<" ";
n-=n%tep;
ans++;
}cout<<endl;
// return ans;
}
int solans(int n){
int ans=0;
while(n){
int n0=n,tep=10;
while(n0%10==0){
tep*=10;
n0/=10;
}
// cout<<n%tep<<endl;
n/=tep;
ans++;
}
return ans;
}
int main()
{
cin>>t;
while(t--){
cin>>n;
ans=solans(n);
cout<<ans<<endl;
sol(n);
}
return 0;
}
CF1352B Same Parity Summands
题意翻译
T组数据,每组数据两个数n,k问你是不是可以把n分解为k个奇偶性相同的数的和。
若可以,第一行输出YES,后面一行是你分解出来的k个数。
否则,输出一行NO
解:只分解为0,1,2,和最后的大数
当n< k时一定不行
n是奇数,k是偶数,不行
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <queue>
#define INF 525525
#include <vector>
using namespace std;
int main()
{
int n,k,t;
cin>>t;
while(t--){
cin >> n >> k;
if(n < k){
cout<<"NO"<<endl;
continue;
}
if(n % 2 && k % 2){
cout<<"YES"<<endl;
for(int i=1;i<k;i++) cout<<1<<" ";
cout<<n-k+1<<endl;
continue;
}
if(!(n % 2) && !(k % 2)){
if(n-2*(k-1) > 0){
cout<<"YES"<<endl;
for(int i=1;i<k;i++) cout<<2<<" ";
cout <<n-2*(k-1)<<endl;
continue;
}
cout<<"YES"<<endl;
for(int i=1;i<k;i++) cout<<1<<" ";
cout << n-(k-1) << endl;
continue;
}
if(n % 2 && !(k%2) ){
cout<<"NO"<<endl;
continue;
}
if(!(n%2) && k%2){
if(n-2*(k-1) <= 0){
cout<<"NO"<<endl;
continue;
}
cout<<"YES"<<endl;
for(int i=1;i<k;i++) cout<<2<<" ";
cout << n-2*(k-1) << endl;
continue;
}
}
return 0;
}
CF1352C K-th Not Divisible by n
题目描述
给定两个正整数 n 和 k。求出第k* 个不能被 n 整除的正整数。
例如,如果 n=3,k*=7,那么所有不能被 3 整除的数为:1,2,4,5,7,8,10,11,13… 在这其中的第 7 个数字为 10。
解:小学数学找规律
ans=k/(n-1)*n+k%(n-1);
如果k恰好整除n-1,那ans所表示的最后一个数是n的倍数,ans--
#include <cmath>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int n,k,t,ans;
int main()
{
cin>>t;
while(t--){
cin>>n>>k;
ans=k/(n-1)*n+k%(n-1);
if(k%(n-1)==0) ans--;
cout<<ans<<endl;
}
return 0;
}