FunnyXEN
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 156 Accepted Submission(s): 19
Problem Description
For any positive integer n, we define function F(n) and XEN(n).
For a collection S(n)={1,2,...,2n}, we select some numbers from it. For a selection, if each selected number could not be divided exactly by any other number in this selection, we will call the selection good selection. Further, we call a good selection best selection if the selection has more elements than any other good selection from S(n). We define F(n) the number of elements in the best selection from S(n). For example, n=2, F(n)=2. From the collection {1,2,3,4}, we can make good selection just like {2,3} or {3,4}, but we can't make any larger selection. So F(2) = 2.
Then we pay attention to XEN(n). For every S(n), there are always some numbers could not be selected to make up any best selection. For instance, when n=2, 1 is always could not be chosen. What's more, for every S(n), there is a number k which satisfies that all the number, from 0 to k, are always could not be chosen. Now we let XEN(n)=k:
n=2, F(n)=2, XEN(2)=1;
n=4, F(n)=4, XEN(4)=1.
You should write a program to calculate the value of F(n) and XEN(n) with a given number n.
For a collection S(n)={1,2,...,2n}, we select some numbers from it. For a selection, if each selected number could not be divided exactly by any other number in this selection, we will call the selection good selection. Further, we call a good selection best selection if the selection has more elements than any other good selection from S(n). We define F(n) the number of elements in the best selection from S(n). For example, n=2, F(n)=2. From the collection {1,2,3,4}, we can make good selection just like {2,3} or {3,4}, but we can't make any larger selection. So F(2) = 2.
Then we pay attention to XEN(n). For every S(n), there are always some numbers could not be selected to make up any best selection. For instance, when n=2, 1 is always could not be chosen. What's more, for every S(n), there is a number k which satisfies that all the number, from 0 to k, are always could not be chosen. Now we let XEN(n)=k:
n=2, F(n)=2, XEN(2)=1;
n=4, F(n)=4, XEN(4)=1.
You should write a program to calculate the value of F(n) and XEN(n) with a given number n.
Input
Your program is to read from standard input.
There are multiple cases. For each case, one integer n (1 ≤ n ≤ 10^7) in a line.
There are multiple cases. For each case, one integer n (1 ≤ n ≤ 10^7) in a line.
Output
Output two integers with one space between them in one line per case.
Sample Input
2 4
Sample Output
2 1 4 1
Source
Recommend
分析:这题。。其实我看不出来背后有什么数学原理的,打表找规律。。
代码如下:
#include <cstdio>
using namespace std;
const int maxn = 25;
int a[maxn],num[maxn];
int n;
void init(){
a[0] = 0;
for (int i=1; i<20; i++) a[i] = 2*a[i-1]+1;
num[1] = 3;
for (int i=2; i<20; i++) num[i] = num[i-1]*3;
}
int main(){
init();
while (scanf("%d",&n)!=EOF){
if (n==1) {printf("1 0\n"); continue;}
int tot = 0, x = 1;
while (x<n) {
tot++;
x+=num[tot];
}
printf("%d %d\n",n,a[tot]);
}
return 0;
}
本文介绍了一个程序设计问题,旨在计算特定数列S(n)中两个函数F(n)与XEN(n)的值。F(n)定义为从S(n)中选取的最大良好集合的元素数量,而XEN(n)则是不可用于构成此类集合的最大数值。通过观察规律,文章给出了一种高效计算这两个值的方法。
141

被折叠的 条评论
为什么被折叠?



