把所有的谎言献给你β
http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1005&cid=832
Problem Description
In the world line 1.048596%
梓川咲太的面前坐著野兔先輩,作為約定,只好乖乖的打開筆記本開始學(xué)習(xí)了。
“加法符號寫歪了,變成了乘法符號,在算式的第三行那個(gè)地方。”櫻島麻衣突然開口。
心領(lǐng)神會的梓川咲太立刻發(fā)現(xiàn)自己正在寫的題目的錯(cuò)誤,乖乖的改正了以后卻心不在焉。
畢竟,梓川咲太的眼神卻很不老實(shí),畢竟,眼前坐著野兔先輩。
“咲太,假設(shè)我給你一個(gè)正整數(shù)n,你是不是可以把它用許多不同的整數(shù)(包括它自己)去減然后把n變成0?”
櫻島麻衣開始穿上披風(fēng)。
這是生氣的前兆,即將沒了眼福的梓川咲太只能不停的點(diǎn)了點(diǎn)頭。
“那行,一個(gè)正整數(shù)n的做減法的操作過程也有很多種,比如說6就能變成6-6=0,6-1-5=0和6-2-4=0,對吧。但是不能變成6-3-3=0,因?yàn)?重復(fù)了。”
櫻島麻衣用漂亮的字體在筆記本上書寫。
“當(dāng)然寫成6=6,6=1+5,6=2+4更好,相當(dāng)于這些正整數(shù)構(gòu)成一個(gè)序列{a1,a2,...,an}滿足(Σai = N),(n >= 1),且這些正整數(shù)互不相同。”
“那么剛剛的例子就是{6},{1,5},{2,4}這樣。”
“有沒有想過把這些序列的數(shù)字乘起來呢?就像加法符號變成乘法一樣,結(jié)果就是6,1x5,2x4這樣......“
”就把這樣操作后的結(jié)果稱為M吧,對于一個(gè)正整數(shù)n,不同的拆分能得出不同的M,但M也是有最大值和最小值的。比如說剛剛那個(gè)例子,M的最大值是8,最小值是5。”
此時(shí)的梓川咲太還不知道即將到來的地獄。
“你剛剛的眼神這么不老實(shí),大概看了幾十下了吧。我就大發(fā)慈悲的寫一些數(shù)字,你給我馬上寫出每個(gè)數(shù)字經(jīng)過操作以后得出來的M的最小值和最大值。”
“不把這些寫完,今晚不讓你睡哦。”
麻衣打開的筆記本上密密麻麻的排列著許多數(shù)字,野兔先輩的代價(jià)實(shí)在是太大了,不過約定就是約定......
?
?
Input
第一行輸入一個(gè)正整數(shù)T(T<=200),表示樣例組數(shù),接下去T行每行表示一組樣例
每組樣例,輸入一個(gè)正整數(shù)N(1<=N<=200)
?
?
Output
輸出總共T行,
每行輸出兩個(gè)整數(shù),表示每個(gè)數(shù)字經(jīng)過操作以后得出的數(shù)字M的最小值和最大值,用一個(gè)空格隔開
?
?
Sample Input
?2 3 6
?
?
Sample Output
?2 3 5 8
C++版本一
/* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<bitset> #include<queue> #include<deque> #include<stack> #include<cmath> #include<list> #include<map> #include<set> //#define DEBUGusing namespace std; typedef long long ll; const int N=200+10; const double PI = acos(-1.0); const double EXP = 1E-8; const int INF = 0x3f3f3f3f; int t,n,m; int main() { #ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout); #endifscanf("%d",&t);while(t--){scanf("%d",&n);if(n==1||n==2){cout << n <<" "<<n<< endl;continue;}int j,i=2;int sum=0;while(sum+i<=n){sum+=i;i++;}int w=i-1;int m = n-sum;ll ans=1;if(m==w){ //若剩余值(n-sum)等于wfor(int j=2;j<=i-2;j++){ans*=j+1;}ans*=i+1;}else{ //若剩余值(n-sum)小于wfor(int j=2;j<w-m+1;j++) ans*=j;for(j=w-m+1;j<=i-1;j++) ans*=j+1;}cout << n-1 <<" "<<ans<< endl;}//cout << "Hello world!" << endl;return 0; }C++版本二
https://www.cnblogs.com/MingSD/p/10050324.html
爆搜找規(guī)律。
爆搜代碼:
#include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout); #define LL long long #define ULL unsigned LL #define fi first #define se second #define pb push_back #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define lch(x) tr[x].son[0] #define rch(x) tr[x].son[1] #define max3(a,b,c) max(a,max(b,c)) #define min3(a,b,c) min(a,min(b,c)) typedef pair<int,int> pll; const int inf = 0x3f3f3f3f; const LL INF = 0x3f3f3f3f3f3f3f3f; const LL mod = (int)1e9+7; const int N = 5e5 + 100; int sta[N]; int Max, gg; void dfs(int b, int l, int lt, int cnt){if(lt == 0){Max = max(Max, l);if(gg == l){for(int i = 1; i < cnt; ++i)cout << sta[i] << ' ';cout << endl;}}for(int i = b; i <= lt; ++i){sta[cnt] = i;dfs(i+1, l*i, lt-i, cnt+1);} } int main(){int n;while(cin >> n){gg = -1;Max = 0;dfs(1, 1, n, 1);gg = Max;dfs(1, 1, n, 1);}return 0; } #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout); #define LL long long #define ULL unsigned LL #define fi first #define se second #define pb push_back #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define lch(x) tr[x].son[0] #define rch(x) tr[x].son[1] #define max3(a,b,c) max(a,max(b,c)) #define min3(a,b,c) min(a,min(b,c)) typedef pair<int,int> pll; const int inf = 0x3f3f3f3f; const LL INF = 0x3f3f3f3f3f3f3f3f; const LL mod = (int)1e9+7; const int N = 1e5 + 100; LL Min[N], Max[N]; vector<int> v; void init(){v.pb(2); v.pb(3);for(int i = 6; i <= 200; ++i){int t = v.size();if(v[0] != 2 && v[t-1] == v[t-2]+1)++v[t-1];else if(v[0] != 2){--v[t-1];v.insert(v.begin(), 2);}else {int f = 1;for(int i = t-2; i >= 0; i--){if(v[i]+1 != v[i+1]){++v[i];f = 0;break;}}if(f) ++v[t-1];}Min[i] = i-1;Max[i] = 1;for(int x : v){Max[i] *= x;}} } vector<int> vc; int main(){int T, n;scanf("%d", &T);init();Min[1] = Max[1] = 1;Min[2] = Max[2] = 2;Min[3] = 2; Max[3] = 3;Min[4] = 3; Max[4] = 4;Min[5] = 4; Max[5] = 6;while(T--){scanf("%d", &n);printf("%lld %lld\n", Min[n], Max[n]);}return 0; }?
總結(jié)
以上是生活随笔為你收集整理的把所有的谎言献给你β的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 明日会吹明日的风β
- 下一篇: 那天的延长线在今天β