偽題解 Offer收割 程式設計練習賽58

2022-04-30 14:03:13 字數 2586 閱讀 3688

【a:最大的k-偏差排列】:

第一次在hiho卡一題,所以暴力了搜尋了一下,70分,後面回來打表找規律,規律是有和k有關的週期。

當k<=n/2時,成週期交叉變化,最後尾部部分單獨考慮。

當k>n/2時,有三個序列,分別是[k+1...n]  [k...n-k+1 ] [1..n-k]

自己的**:

#includeusing

namespace

std;

int ans[110

],n,k;

intmain()

else

if(k<=n/2)

if(k>=n-tmp*2*k-1) for(i=n;i>=tmp*2*k+1;i--) ans[++pos]=i; //

a //

最後一部分同理。

else

}else

for(i=1;i<=n;i++) printf("

%d "

,ans[i]);

return0;

}

view code

別人的段**:

#includeusing

namespace

std;

int used[110

];int

main()

return0;

}

view code

【b:孤獨的字元】:

水題乙個:對於每個字元,找到它做出貢獻的範圍,分別記錄左邊界l和右邊界r,然後累計乘積。

#includeusing

namespace

std;

#define ll long long

const

int maxn=100010

;ll l[maxn],r[maxn],laxt[

30],ans;

char

c[maxn];

intmain()

for(i=0;i<26;i++) laxt[i]=n+1

;

for(i=n;i>=1;i--)

for(i=1;i<=n;i++) ans+=(ll)(i-l[i])*(r[i]-i);

cout

return0;

}

view code

【c:秋天來了】:

一眼感覺是差分約束題,但是發現由於每個條件的(l,r)之間的點都要加限制,限制條件過多,不行。

所以直接暴力一點去更新區間(l,r);很明顯可以加優化:如果(l,r)之間的最大值都比ai小,那就沒必要更新了。

所以實際上暴力區間(l,r)的次數不會太多。(但是比賽後驗證了一下,直接把線段樹部分去掉,暴力就可以過。。。。)

#includeusing

namespace

std;

const

int maxn=100001

;int

h[maxn],x[maxn],y[maxn];

int max[maxn<<2

];void build(int now,int l,int

r)

int mid=(l+r)>>1

; build(now

<<1

,l,mid);

build(now

<<1|1,mid+1

,r);

max[now]=max(max[now<<1],max[now<<1|1

]);}

void update(int now,int l,int r,int pos,int

val)

int mid=(l+r)>>1

;

if(mid>=pos) update(now<<1

,l,mid,pos,val);

else update(now<<1|1,mid+1

,r,pos,val);

max[now]=max(max[now<<1],max[now<<1|1

]);}

int qmax(int now,int l,int r,int l,int

r)int

main()}}

else}}

}}for(i=1;i<=n;i++) printf("

%d\n

",h[i]);

return0;

}

view code

【d:nim森林】:

不如沒有前面兩步,就是最後乙個石子輸的nim博弈型別。

忽略前面兩步,輸的情況是:

1,全部石子堆的石子個數都為1,而且石子堆數為奇。

2,至少有兩堆大於1的石子堆,且石子堆的石子異或值為0。

根據兩個情況,可以騙到一些分。。。(但是我手速慢了,最後慌慌張張提交,0分。。。輸出「no」都有10分,媽蛋

1,假如只有一堆: 如果這一堆只有x=1個,那麼必輸;否則,勝利的代價是x-1。

2,假如全部堆都有xi=1;那麼勝利代價是n-2;

Offer收割 程式設計練習賽1

做了三題,題目都比較暴力。a題 題意 給你乙個三階的幻方,三階幻方指的是將1 9不重複的填入乙個3 3的矩陣當中,使得每一行 每一列和每一條對角線的和都是相同的。現在準備將乙個三階幻方中的一些陣列抹掉 0代替 交給你來進行還原,並且希望她能夠判斷出究竟是不是只有一組解。如果只有一組解,輸出該三階幻方...

Offer收割 程式設計練習賽7

比較容易想到是o n 2 的解決方案,遍歷n種刪除可能,每次遍歷o n 時間求總高度。前者優化比較困難,因而想辦法優化每次遍歷求高度的時間。由前往後遍歷,當刪除第i個時,先前的排版是連續的,從而通過計數器等累加方法可以求得已完整行的總高度presum,以及當前未完整行的w,h。include def...

Offer收割 程式設計練習賽26

題解 按照條件求解出最大的三角形和最小的三角形,然後求重心即可。這裡求解面積有兩種方法 海 式 p p a p b p c 將三角形的每一條邊求解出來,然後進行處理 用有向向量進行計算,如果設a x0,y 0 b x1,y 1 c x2,y 2 三點為三角形三個頂點,a 為有向面積,那麼2a x0 ...