一場爆零的考試。
記住這個慘痛的教訓。
1>心有靈犀
大意:給你乙個不超過 10^9 的數字 n 和乙個交換次數上限 k,
每次操作對這個 數字 n 的其中兩位進行交換,
求出交換後最 大的數字和最小的數字的差的絕對值。
要點:1. 某一位的數字可以和它本身進行交換
2. 交換的數字不可以有前導零(即第一位不可以是 0)
解法:1)如果這個數字是 n 位數,那麼其交換不超過 n-1 次就可以變成最大值和最小值
可以根據這個點進行剪枝。
2)題目給的數字不超過 10^9,那麼進行全排列直接暴力就好了, 時間複雜度最多 9!
我是怎麼爆零的:貪心......
以後記得先算最大的時間複雜度,再貪心......
#include#include#include
#include
#include
#include
using
namespace
std;
string
n;int k,len,d[13
];void
work()
int mn=d[0
];
for(int i=1;i3)+(mn<<1)+d[i];
printf(
"%d\n
",mx-mn);
}string
ans_mx,ans_mn;
void dfs(string nw,int tm,int
pos)
else
if(pos>=len) return
;
else
dfs(nw,tm,pos+1
); }
}int
main()
}return0;
}
2>不服來戰
你有一列 n 盞燈,初始時有些是開的,有些是關的。
每盞燈有各自的權值。每次操作你可以改變任意連續 k 盞燈的開關狀態。
你可以操作任意多次,求最終 最大的 亮著的燈的權值和。
解法:轉換思路:每次改變連續k盞燈,
那麼分為操作一次和連著操作兩次:
1)改變 i - i+k-1 盞燈的狀態
2)改變 i 和 i+k 的狀態
然後發現:可以將燈進行分組:
1,1+k,1+k*2,1+k*3...
1,2,2+k,2+k*2...
組與組之間(除了開頭與結尾的 兩個點 以外)沒有影響!
再稍作分析,不難發現,如果一組內「初始時是關的」的燈為偶數個,
那麼我們可以 做到只把它們全部開啟;
如果一組內「初始時是關的」 的燈為奇數個,這個時候我們不能把所有的燈都開啟,只好作出讓步,選擇放棄亮度最小 的那盞燈。
每一組都如此處理,最後加起來。
關於開頭結尾兩個點,我們通過列舉 是否在開始時^(1-k)個點的狀態,那麼最後的點就會隨之改變
(其實不太懂這一段)
#include#include#include
using
namespace
std;
intt,n,k,sum;
const
int n=1003
;bool
f[n];
intv[n];
intget()
if(cnt) nw-=mn;
}return
nw;}
intmain()
for(int i=1;i<=n;i++)
scanf("%d
",&v[i]),sum+=v[i];
int ans=get
();
for(int i=1;i<=k;i++) f[i]^=1
; ans=max(ans,get
());
printf(
"%d\n
",ans);
}return0;
}
3>鐵路網路
等下
未完成作業
分治 1.一元三次方程求解 1015 2.迴圈比賽日程表 3.求方程的根 5.黑白棋子的移動 1310 6.光榮的夢想 2323 7.小車問題 1668 8.方程分f x 的根 9.求逆序對 1198 10.迴圈比賽 11.二分查詢 1135 12.麥森數 1030 動態規劃 挖地雷 取數字問題 搜...
通訊 未完成
網路程式設計對於後端開發來說也是非常重要的一部分,常見的使用案例包含,郵件 web伺服器 rpc等底層通訊模型都離不開通訊。及j a是第乙個從一開始就為網路應用而設計的程式語言,最早的兩個實用j a應用的程式之一就是web瀏覽器,隨著internet的不斷發展,j a成為了唯一適合構建下一代網路應用...
OpenTLD 未完成 虎頭
tld是一種演算法的簡稱,原作者把它叫做tracking learning detection。搞視覺的人看到這個名字都會嚇一跳,很ambitious的計畫。是09年的工作,不算太久,不過也不太新。網上關於這個的資源其實很多,很大程度和作者開放源 有關。學習過程中碰到的第乙個問題就是資源太多 當然是...