省賽前最後的三場組隊賽了 形勢不妙 感覺一些題是應該要出的:
第一場的h題 uvalive-6852
題意:給n個數從1到n 給乙個區間a b 表示數字前a個能覆蓋 後b個不能 迴圈下去 問最後被覆蓋了(0,1,2,3)次的數字有多少個
n到1e5 m到1e6 當時a和b都是小於等於16的
這道題的關鍵在於a和b都是小於等於16的 就是說總數不超128 但是常數128還是太大了 所以還要縮減常數 方法就是用乙個map【b】【a】 其中map【b】【0-a】中的值都為1 這樣你每次查詢時直接某個數模b就知道他是否位於哪個有值的區間了
題意 給乙個大等級盒子 裡面很多個小等級盒子 等級為0的盒子裡面才有糖果 問要取出一定的糖果需要開啟糖果多少次
這是資料範圍
感覺這道題和上面那題很像 關鍵點都在於要發現乙個地方:資料並沒有並沒有由n推演的那麼大 他實際只有xi小於等於1e12 打比賽的時候我們想到非常暴力的就是從樹的底部遞推 每次用ceil函式疊加父節點個數 然而發現那樣如果直接巢狀迴圈的話複雜度是o(n*m) 實際上對於每次詢問我們不需要遍歷n次 只需要不斷的對當前的節點數相除 當他為1時直接把字首的長度和加上即可 因為每次我的父節點至少衍生出兩個子節點 所以複雜度不會超過o(m*log(n)) 就是只要在原來的超時**做小小的優化就行了
貼下**:
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #pragma comment(linker, "/stack:1024000000,1024000000")
using namespace std;
#define ll long long
const int maxn=300000+500;
int tot;
int n,m;
ll a[maxn],len[maxn],inp[maxn];
ll sum[maxn];
inline void solve()
}printf("%lld\n",ans);
}int main()
}len[tot]--;
sum[0]=0;
for(int i=1;i<=tot;i++) sum[i]=sum[i-1]+len[i];
for(int i=1;i<=m;i++) solve();
return 0;
}
未完。。。 2014 4 3第一場組隊賽總結
小小的周折過後,最終的隊伍組合確定了,第一場比賽!今天的題目並不能完全暴露我們團隊配合中的問題,但是似乎我們可以有更好的成績。細想想題目,絕大多數都是水題,如果當時多一些冷靜,多一些默契,結果必然會是更好。前面的水題就不多說了,每個人發現可寫的題目就寫,然後過,墨守成規。值得一提的還是有的 g題是我...
nyist 組隊賽(三)
本次比賽是浙江省賽的題,做了5 道題感覺水平有點次啊,讓我感到差距太大,自己需要學的知識好有很多 比賽前10分鐘我來晚了隊友等著我讀題,當我來的時候,當時別人已經把a題給a出來了,a題就是乙個大水題,1分鐘讀題 2分鐘 接著就是c題2分鐘讀題 n分鐘思考 2分鐘 n 20 也是乙個水題,接著g題,模...
組隊賽三 dfs搜尋
先要牢記string的擷取部分的函式。include include using namespace std void main string s abab cout s.substr 2 我們令咒文只由兩種字元 e 和 x 組成,對於乙個咒文 s s 我們有兩種變換 我們給出乙個較短的咒文 s s...