Problem Statement
You are given the ints n and d. Return any vector with the following properties:
The number of elements is n.
Each element is between 0 and 10^9, inclusive.
All elements are distinct.
No element is divisible by 10.
If we take all n*(n-1)/2 possible sums of two elements and look at the last digit of each of them, the digit d will be the unique most frequent one.
Definition
Class: MostFrequentLastDigit
Method: generate
Parameters: int, int
Returns: vector
Method signature: vector generate(int n, int d)
(be sure your method is public)
Limits
Time limit (s): 2.000
Memory limit (MB): 256
Constraints
n will be between 2 and 200, inclusive.
d will be between 0 and 9, inclusive.
如果能用一种结尾凑,就用一种结尾凑,否则就把两种结尾尽量平均分开。
#include<bits/stdc++.h>
using namespace std;
class MostFrequentLastDigit{
public:
void solve(vector<int> &d,int len,int num){
for(int i=1;i<=len;i++){
int t = i*10+num;
d.push_back(t);
}
}
vector <int> generate(int n, int d){
vector<int> ret;
int p=n/2;
int q=n-p;
switch(d){
case 0:
solve(ret,n,5);
break;
case 1:
solve(ret,p,5);
solve(ret,q,6);
break;
case 2:
solve(ret,n,6);
break;
case 3:
solve(ret,p,1);
solve(ret,q,2);
break;
case 4:
solve(ret,n,2);
break;
case 5:
solve(ret,p,2);
solve(ret,q,3);
break;
case 6:
solve(ret,n,3);
break;
case 7:
solve(ret,p,3);
solve(ret,q,4);
break;
case 8:
solve(ret,n,4);
break;
case 9:
solve(ret,p,4);
solve(ret,q,5);
break;
}
return ret;
}
};/*
int n=4,d=7;
int main(){
MostFrequentLastDigit t;
vector<int> tmp = t.generate(n,d);
for(int i=0;i<(int)tmp.size();i++){
cout<<tmp[i]<<" ";
}
return 0;
}*/