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;
}
posted @ 2020-06-07 07:40  _Buffett  阅读(136)  评论(0编辑  收藏  举报