【a:最大的k-偏差排列】:
第一次在hiho卡一題,所以暴力了搜尋了一下,70分,後面回來打表找規律,規律是有和k有關的週期。
當k<=n/2時,成週期交叉變化,最後尾部部分單獨考慮。
當k>n/2時,有三個序列,分別是[k+1...n] [k...n-k+1 ] [1..n-k]
自己的**:
#includeusingview codenamespace
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;
}
別人的段**:
#includeusingview codenamespace
std;
int used[110
];int
main()
return0;
}
【b:孤獨的字元】:
水題乙個:對於每個字元,找到它做出貢獻的範圍,分別記錄左邊界l和右邊界r,然後累計乘積。
#includeusingview codenamespace
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;
}
【c:秋天來了】:
一眼感覺是差分約束題,但是發現由於每個條件的(l,r)之間的點都要加限制,限制條件過多,不行。
所以直接暴力一點去更新區間(l,r);很明顯可以加優化:如果(l,r)之間的最大值都比ai小,那就沒必要更新了。
所以實際上暴力區間(l,r)的次數不會太多。(但是比賽後驗證了一下,直接把線段樹部分去掉,暴力就可以過。。。。)
#includeusingview codenamespace
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;
}
【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 ...