分析:貪心吧,讓每次跳的點盡量小。
石頭是可能無序的,比賽是實在沒發現,就加了個排序過了,哎。。。
和代碼一起講做法吧,假設情況1 :上一步k加這一步余數x大於L,則最後剩余部分需要單獨跳;情況2:上一步k加這一步余數x小於等於L,最後剩余部分可以並進上一步,即k+x。
畫了一張圖;
代碼:
#include #include #include #include #include #include #include #include #define MOD 1000000007 typedef long long ll; using namespace std; const int maxn=200005; int da[maxn]; int main() { int T,n,m,l,cas=0; scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&m,&l); for(int i=1;i<=n;i++) scanf("%d",&da[i]); da[++n]=m;da[0]=0; int ans=0; int k=l;//k表示上次跳的距離,用此限制下次的跳越 sort(da,da+n); for(int i=1;i<=n;i++) { int x=(da[i]-da[i-1])%(l+1); int y=(da[i]-da[i-1])/(l+1); if(k+x>=l+1) { k=x; ans+=y*2+1; } else if(k+x
POJ3009 Curling 2.0 Curlin
整個c++程序設計全面圍繞面向對象的方式進行,類
下面著重介紹C++多線程,C++多線程為了同步完成了多項任
歸並排序完全遵循分治模式,主要操作分為三步: 1.分解:分解
一.硬件基礎 1.硬件框圖