小q在週末的時候和他的小夥伴來到大城市逛街,一條步行街上有很多高樓,共有n座高樓排成一行。
小q從第一棟一直走到了最後一棟,小q從來都沒有見到這麼多的樓,所以他想知道他在每棟樓的位置處能看到多少棟樓呢?(當前面的樓的高度大於等於後面的樓時,後面的樓將被擋住)
輸入描述:
輸入第一行將包含乙個數字n,代表樓的棟數,接下來的一行將包含n個數字wi(1<=i<=n),代表每一棟樓的高度。
1<=n<=100000;
1<=wi<=100000;
輸出描述:
輸出一行,包含空格分割的n個數字vi,分別代表小q在第i棟樓時能看到的樓的數量。
輸入例子1:
65 3 8 3 2 5
輸出例子1:
3 3 5 4 4 4
乙個簡單的單調棧題目,其實抽象一下問的就是某一棟樓左側單調遞減的樓層數量和右側單調遞增的樓層數量,兩者相加再加上自己這一棟樓即可
#includeusing namespace std;
stacks;
int a[100005];
int ans[100005];
int main()
while(s.size()) s.pop();
for(int i=n;i>=1;i--)
for(int i=1;i<=n;i++) printf("%d ",ans[i]+1);
return 0;
}
由於業績優秀,公司給小q放了 n 天的假,身為工作狂的小q打算在在假期中工作、鍛鍊或者休息。他有個奇怪的習慣:不會連續兩天工作或鍛鍊。只有當公司營業時,小q才能去工作,只有當健身房營業時,小q才能去健身,小q一天只能幹一件事。給出假期中公司,健身房的營業情況,求小q最少需要休息幾天。
輸入描述:
第一行乙個整數 表示放假天數
第二行 n 個數 每個數為0或1,第 i 個數表示公司在第 i 天是否營業
第三行 n 個數 每個數為0或1,第 i 個數表示健身房在第 i 天是否營業
(1為營業 0為不營業)
輸出描述:
乙個整數,表示小q休息的最少天數
輸入例子1:
41 1 0 0
0 1 1 0
輸出例子1:
2例子說明1:
小q可以在第一天工作,第二天或第三天健身,小q最少休息2天
典型的線性dp題,只有三個狀態,健身、運動或者休息,如果當前健身,前一天的狀態只能是工作或者是休息,如果是工作,前一天的狀態只能是健身或休息,如果是休息,前一天的狀態均可,維護的休息的天數。
#includeusing namespace std;
int a[100005];
int b[100005];
int dp[100005][3];
int main()
printf("%d",min(dp[n][0],min(dp[n][1],dp[n][2])));
return 0;
}
小q在進行一場競技遊戲,這場遊戲的勝負關鍵就在於能否能爭奪一條長度為l的河道,即可以看作是[0,l]的一條數軸。
這款競技遊戲當中有n個可以提供視野的道具−真視守衛,第i個真視守衛能夠覆蓋區間[xi,yi]。現在小q想知道至少用幾個真視守衛就可以覆蓋整段河道。
輸入描述:
輸入包括n+1行。
第一行包括兩個正整數n和l(1<=n<=105,1<=l<=109)
接下來的n行,每行兩個正整數xi,yi(0<=xi<=yi<=109),表示第i個真視守衛覆蓋的區間。
輸出描述:
乙個整數,表示最少需要的真視守衛數量, 如果無解, 輸出-1。
輸入例子1:
4 63 6
2 40 2
4 7輸出例子1:
3
本質上就是給一堆子區間覆蓋乙個更大的區間,首先按照左側端點排序,維護乙個當前已經覆蓋到的端點,在所有子區間中尋找可以覆蓋當前端點並且右側端點最大的點即可,這裡用的堆,如果不嫌麻煩其實可以直接均攤o(1)尋找,不過這裡就直接用堆(set是平衡樹,一樣logn複雜度維護最大值,所以當堆用了)
#includeusing namespace std;
pairpii[100005];
sets;
int main()
sort(pii+1,pii+n+1);
int tot=0;
int now=0;
int ans=0;
bool flag=true;
while(flag)
flag=tmp;
if(now>=l) break;
if(s.size()) now=*s.rbegin(),ans++;
}if(now>=l) printf("%d",ans);
else printf("-1");
return 0;
}
騰訊2020校園招聘 後台(3)
乙個簡單的動態規劃,注釋寫的很明白了 var n parseint readline var p1 newarray n var p2 newarray n var line readline var lines line.split for let i 0 i n i line readline ...
騰訊2020校園招聘 後台 程式設計題
a 壓縮演算法 做法 遞迴處理每個匹配的 中的單詞,再拼接起來。b 逛街 做法 假設現在在i樓,一定可以看到i 1和i 1的樓,i 往左看是形成的序列是乙個單調增的序列,用單調棧可以求出離當前樓最近,而且高度還要高於當前樓的樓。c 逆序對 做法 把序列的歸併樹畫出來,每一層是由許多段構成的。而每一層...
騰訊2020校園招聘 後台 程式設計題
小q想要給他的朋友傳送乙個神秘字串,但是他發現字串的過於長了,於是小q發明了一種壓縮演算法對字串中重複的部分進行了壓縮,對於字串中連續的m個相同字串s將會壓縮為 m s m為乙個整數且1 m 100 例如字串abcabcabc將會被壓縮為 3 abc 現在小q的同學收到了小q傳送過來的字串,你能幫助...