NYOJ541 最强DE 战斗力(第五届省赛试题)
最強DE 戰斗力
時間限制:1000?ms ?|? 內存限制:65535?KB 難度:3 描述春秋戰國時期,趙國地大物博,資源非常豐富,人民安居樂業。但許多國家對它虎視眈眈,準備聯合起來對趙國發起一場戰爭。
顯然,面對多個國家的部隊去作戰,趙國的兵力明顯處于劣勢。戰斗力是決定戰爭成敗的關鍵因素,一般來說,一支部隊的戰斗力與部隊的兵力成正比。但當把一支部隊分成若干個作戰隊伍時,這個部隊的戰斗力就會大大的增強。
一支部隊的戰斗力是可以通過以下兩個規則計算出來的:
1.若一支作戰隊伍的兵力為N,則這支作戰隊伍的戰斗力為N;
2.若將一支部隊分為若干個作戰隊伍,則這支部隊的總戰斗力為這些作戰隊伍戰斗力的乘積。
比如:一支部隊的兵力為5時的戰斗力分析如下:
| 情況 | 作戰安排 | 總的戰斗力 |
| 1 | 1,1,1,1,1(共分為5個作戰隊伍) | 1*1*1*1*1=1 |
| 2 | 1,1,1,2???(共分為4個作戰隊伍) | 1*1*1*2=2 |
| 3 | 1,2,2?????(共分為3個作戰隊伍) | 1*2*2=4 |
| 4 | 1,1,3?????(共分為3個作戰隊伍) | 1*1*3=3 |
| 5 | 2,3????????(共分為2個作戰隊伍) | 2*3=6 |
| 6 | 1,4????????(共分為2個作戰隊伍) | 1*4=4 |
| 7 | 5???????????(共分為1個作戰隊伍) | 5=5 |
接下來有N行,每行有一個整數Ti 代表趙國部隊的兵力. (1<=Ti<=1000) i=1,…N
找到規律,保證取3最多,若%3余1則去一個3取4,余2則直接取的d[2].以基礎的d[1]=1,d[2]=2,d[3]=3,d[4]=4為基礎遞推求解。之后,注意用大數保存結果,測試了下_int64最多存到119。
代碼:
#include<cstdio> #include<iostream> #include<string> #include<algorithm> using namespace std; string Multiply(string s,int x) //大數乘以整形數 {reverse(s.begin(),s.end());int cmp=0;for(int i=0;i<s.size();i++){cmp=(s[i]-'0')*x+cmp;s[i]=(cmp%10+'0');cmp/=10;}while(cmp){s+=(cmp%10+'0');cmp/=10;}reverse(s.begin(),s.end());return s; } int main() {string s[1005];s[1]="1",s[2]="2",s[3]="3",s[4]="4";for(int i=5;i<1005;i++){s[i]=Multiply(s[i-3],3);}int n,m;scanf("%d",&n);while(n--){scanf("%d",&m);cout<<s[m]<<"\n";}return 0; }轉載于:https://www.cnblogs.com/walkthehorizon/p/4388157.html
總結
以上是生活随笔為你收集整理的NYOJ541 最强DE 战斗力(第五届省赛试题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINIO64位模拟键鼠操作
- 下一篇: Principles of Reacti