제출 #245256

#제출 시각아이디문제언어결과실행 시간메모리
245256eohomegrownappsToys (CEOI18_toy)C++14
79 / 100
5056 ms66504 KiB
#include <bits/stdc++.h>
using namespace std;

vector<pair<int,int>> factors; //(val, cnt)

void calculateFactors(int n){
	int i = 2;
	while (i*i<=n){
		if (n%i==0){
			int fac = i;
			int cnt = 0;
			while (n%i==0){
				n/=i;
				cnt++;
			}
			factors.push_back({fac,cnt});
		}
		i+=1;
	}
	if (n!=1){
		factors.push_back({n,1});
	}
}

vector<int> vals;

void recurse(int ind, int minval, int curval, int runningtotal){
	//cout<<ind<<" "<<curval<<" "<<minval<<" "<<runningtotal<<'\n';
	if (ind==factors.size()){
		//cout<<"reached end with "<<curval<<'\n';

		//have we used everything?
		bool yes = true;
		for (int i = 0; i<factors.size(); i++){
			if (factors[i].second!=0){
				yes=false;break;
			}
		}
		if (yes){
			//we have.
			vals.push_back(runningtotal+(curval-1)-1);
			return;
		}
		if (curval==1){
			return;
			//don't care
		}
		//current total in curval
		if (curval<minval){
			return;
		}
		recurse(0, curval, 1, runningtotal+(curval-1));
		return;
	}
	int pv = 1;
	for (int i = 0; i<=factors[ind].second; i++){
		factors[ind].second-=i;
		recurse(ind+1, minval, curval*pv, runningtotal);
		factors[ind].second+=i;
		pv*=factors[ind].first;
	}
}

int main(){
	cin.tie(0);
	ios_base::sync_with_stdio(0);
	int n;
	cin>>n;
	calculateFactors(n);
	/*for (auto p : factors){
		cout<<p.first<<' '<<p.second<<'\n';
	}*/
	recurse(0,1,1,1);
	sort(vals.begin(),vals.end());
	vals.erase(unique(vals.begin(),vals.end()), vals.end());
	cout<<vals.size()<<'\n';
	for (int v : vals){
		cout<<v<<' ';
	}cout<<'\n';
}

컴파일 시 표준 에러 (stderr) 메시지

toy.cpp: In function 'void recurse(int, int, int, int)':
toy.cpp:29:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if (ind==factors.size()){
      ~~~^~~~~~~~~~~~~~~~
toy.cpp:34:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i<factors.size(); i++){
                   ~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...