時間限制: 1 sec 記憶體限制: 128 mb
提交: 244 解決: 44
[提交] [狀態] [討論版] [命題人:admin]
題目描述
樣例輸入
180
360 120 180
330 90
61 1
180 180
樣例輸出
60
1120
給你乙個沙漏,告訴你沙漏裡有多少沙子(同時這也是沙漏的上部分或下部分的容積),然後告訴你會進行k次翻轉的時刻點(遞增)
q次詢問,問在初始值為ai的時候第t秒a部分(最開始是上半部分)裡沙子的質量(t遞增)
一開始覺得很簡單,覺得可以模擬但可能超時,然後就寫了下面這個**,果然超時
#includeusing namespace std;
int tim[100005];
int ans[100005];
int main()
ai = ai+flag*(t-tim[j-1]);
if(ai>x)
ai=x;
if(ai<0)
ai=0;
printf("%d\n",ai);
}return 0;
}
但是實際上應該這樣想,可以模擬t秒時a部分所有的ai初始值的情況(也就是0---x),這樣每次詢問的時候再考慮這次輸入的ai就可以了(因為詢問的時間依次遞增)
那麼實際上可以得到一條曲線設x軸為ai的初始值,y軸為t秒後的a部分裡的沙子質量,那麼,
一開始,曲線就是個正比例函式(並且斜率是1),每過一秒,曲線向下(上 )平移乙個單位,注意
移動後不能小於零,不能大於x,這樣最多變成乙個三段的分段函式,那麼維護兩個分界點即可
add是如果什麼都不考慮,原影象的平移量,那麼加上ai再mix(我寫的乙個函式,用來限制範圍)一下就得到了當前的值,
因為t不一定是恰好在翻轉點,那麼要加上flag*(t-tim[j-1]),再限制在0----x之間就是答案了
#includeusing namespace std;
int tim[100005];
int x,k,q;
int mix(int t,int l = 0,int r = x)
int main()
ai = mix(flag*(t-tim[j-1])+mix(ai+add,low,up));
printf("%d\n",ai);
}return 0;
}
分段函式求值
上機內容 用if else語句求解分段函式。上機目的 學會分支結構程式設計。作 者 李洋 完成日期 2012 年 10月 23日 版 本 號 v1.0 輸入描述 x,x為非負數。問題描述 求以x為自變數的分段函式的值。程式輸出 y的值。問題分析 略 演算法設計 輸入x後,判斷是否為非負數。當是非負數...
分段函式求值
上機內容 用if elsse語句和switch語句求解分段函式 上機目的 學會分支結構程式設計 作 者 李全港 完成日期 2012 年 10月22 日 版 本 號 v1.0 輸入描述 x x 為非負數 問題描述 求以 x 為自變數的分段函式的值,y x 0 x 2 y x 2 2 2 x 6 y x...
分段函式(彙編)
第一次寫彙編,兩天從一臉蒙蔽到硬著頭皮寫程式,我做到了,寫出來的時候激動得說不出話 函式 當 x 3時y 3 x 5,當 x 3,y 6 data segment promrt db input x 10000 10000 buffer db 6,6 dup c10 dw 10 x dw out m...