JOI 2019 Final 硬幣收藏

2022-05-07 19:03:11 字數 1161 閱讀 1493

戳我

先將所有棋子移動到最近的目標點上

我們設兩個變數\(ans1,ans2\)表示到目前為止這個點上可以移動棋子的數目,然後\(f[i][j]\)表示\((i,j)\)上有多少個棋子,\(ans\)為答案

如果為正表示從左邊移到右邊

如果為負表示從右邊移到左邊

我們考慮怎麼維護這個東西

我們考慮一下兩種大情況:

這個位置上原本有值

那麼我們只要將\(ans+(f[i][j]-1)\)即可

這個位置本來沒有值

我們考慮三種情況,我們以一行為例,其餘的一行同理

上面留了乙個坑,對於第一行的時候後,在下面一行往上移的時候我們還要判斷下面一行的情況。如果下面一行\(ans2==1,f[i][2]==0\)那麼就不能移,因為要留著自己用

然後處理完之後會得到這一行的\(ans1\)和\(ans2\)於是我們在判斷一下\(ans1\)和\(ans2\)是否為一正一負.

如果是則把絕對值小的那個移到另一行去,答案加上這個絕對值。

每次弄完之後,答案加上\(abs(ans1)+abs(ans)\)表示往後面移這些硬幣

#include#define int long long

#define rg register

#define file(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);

using namespace std;

const int n=1e6+10;

int read()

int x[n],y[n],n,ans,flag1,flag2,ans1,ans2;

int f[n][3];

void solve(int x,int y)

if(x>n) x=n;

if(x<1) x=1;

if(y>2) y=2;

if(y<1) y=1;

f[x][y]++,ans+=abs(nowx-x)+abs(nowy-y);

}main()

if(f[i][2]==0)

if(ans1<0&&ans2>0)

ans+=abs(ans1)+abs(ans2);

} cout

}

MapReduce之Reduce端Join實現

mapreduce之helloword很簡單,但是要想繼續自己來寫,還有很多坑要注意。這不,咱們這回來個reduce端join實現。網上一搜,有很多,我們要來個自己的吧。廢話少說,先上傳一些資料到hdfs上。input pd.csv 假設這個是產品名稱檔案 input sale.csv 假設這個是銷...

ArcEngine dbf表之間連線Join

arcengine dbf表之間連線join 上乙個部落格寫了要素圖層屬性表與.dbf之間的連線join,但是若想兩個.dbf表之間連線,再用那種方法就不行了,因此這裡呼叫gp工具實現.dbf表之間的連線join。gp工具實在是強大,能解決你的問題,但是卻不能讓你知道到底如何實現的,連線之後開啟.d...

年輪蛋糕JOI2014Final

試題描述 joi 君馬上要和妹妹 joi 子和 joi 美一起吃小吃。今天的小吃是他們三個人都很喜歡的年輪蛋糕。年輪蛋糕是像下圖一樣呈圓筒形的蛋糕。為了把蛋糕分給三個人,joi 君必須沿著半徑方向切 3 刀,從而把蛋糕分成三塊。然而,由於年輪蛋糕硬得像實木一樣,要讓刀切進去並不簡單。因此,這個年輪蛋...