NOIP2015模擬11 3 IOIOI卡片占卜

2021-07-11 07:23:04 字數 1256 閱讀 3382

把原序列變成相鄰的兩個的異或值,初始序列就只有4個1,那麼每次操作只會更改l,r兩個值,

問題就轉換成了求這個序列全部為0時的最小代價(顯然使原序列全為1的方案是沒有的),

我們把每次的l,r連一條邊,邊權就是(r-l+1),一次合法的操作只能把兩個點變成0,代價就是兩個點的最短距離,

答案就是把4個1暴力分成兩組的兩兩最短距離和,

重複的情況是有的,但答案一定不是最優的,

#include

#include

#include

#include

#include

#include

#define foi(i,a,b) for(i=a;i<=b;i++)

#define fo(i,a,b) for(int i=a;i<=b;i++)

#define fo1(i,a,b) for(int i=a;i>=b;i--)

//#define read(a) scanf("%d",&a)

using

namespace

std;

typedef

long

long ll;

const

int n=500500;

const ll inf=9223372036854775800;

int read(int &n)

int m,n;

int a[5];

int a[n],b0,b[2*n][3];

int d[3*n];

ll d1[n],ans;

bool z[n];

void join(int q,int w,int e,int e)

int spfa(int q)

}z[q]=0;

}}int main()

ans=inf;

spfa(a[0]),w=d1[a[1]],spfa(a[2]),w+=d1[a[3]];ans=min(ans,w);

spfa(a[0]),w=d1[a[2]],spfa(a[1]),w+=d1[a[3]];ans=min(ans,w);

spfa(a[0]),w=d1[a[3]],spfa(a[1]),w+=d1[a[2]];ans=min(ans,w);

if(ans>=inf/3)printf("-1\n");

else

printf("%lld\n",ans);

return

0;}

NOIP2015模擬11 3 裝飾大樓

給出乙個序列a,ai表示對於乙個h序列來講,以i結尾的lis的長度。h中的數兩兩不等。現在你知道了a刪去乙個數之後的序列b 未知刪掉哪位 求a序列有多少種。a 10 6 好多細節呀!不爽,懶得打題解。可以發現,對於乙個序列a,它滿足條件的前提就是,對於每乙個ai,都存在乙個aj j i 滿足aj 1...

NOIP2015模擬11 3 備用鑰匙

你知道just odd inventions社嗎?這個公司的業務是 只不過是奇妙的發明 just odd inventions 這裡簡稱為joi社。joi社有n名員工,編號從1到n。所有員工的工作時間從時刻0持續到時刻m,時刻0和時刻m的時候,所有員工都必須在公司內。某天,出於巧合,joi社的每個員...

裝飾大樓 NOIP2015模擬11 3

其實和這東西只是扯上邊而已,完全沒有考演算法 切入正題 際資訊學奧林匹克競賽將要在日本召開了。為了歡迎全世界的選手們,委員會決定將從機場到宿舍沿路的大樓裝飾起來。根據某著名設計師的設計,做裝飾的大樓從機場到宿舍的方向必須高度嚴格遞增。也就是說,如果做裝飾的大樓從機場開始高度順次為hi,那麼必須滿足h...