theme:給定n棟樓的高度及到達該棟樓得到的開心值,開始可以從任一棟樓出發,下一步只會往前到》=它高度的樓,問能獲得的最大開心值是多少?(0solution:就是求最長上公升子串行,不過帶了權,但資料範圍較大,不能用常規dp,考慮用樹狀陣列,每次就是求左邊小於 該元素的以此元素結尾的子串行之和的最大值。現將樓高度從小到大排序後去重得到陣列v,以排序後的陣列的下標作為區間建樹,則對於原陣列a的每乙個元素,找到》=它的第乙個下標x,之後在[1,x+1]區間查詢最大值,由於是按原順序先查詢後插入的,所以查詢時在陣列中且下標<=x的都<=a[i]
#include#define far(i,t,n) for(int i=t;iv;
int main()
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
ll ans=0;
far(i,0,n)
long long ans=0;
for (int i = 0; i < len;i++)
printf("%lld\n",ans);
}
theme:給定乙個字串,求能形成序列xtcpc個數。1<=n<=2*10^5
solution:從前往。後記錄每個相關字元已出現的個數,具體為如果所求序列中它前乙個字元已出現的個數》=它才++,最後cnt[c]即為所求
#include using namespace std;
int n;
char s[200005];
int cnt[6];
int id(char x)
int main()
}printf("%d\n",cnt[4]);
}return 0;
}
theme:對於乙個正n邊形,每次取每條邊的終點連線再構造乙個n邊形,無窮重複下去,問所有n邊形的周長之和為多少?最外邊邊長都為100.
solution: 設最外面邊長為1,則下乙個n邊形邊長為
#includeusing namespace std;
#define far(i,t,n) for(int i=t;i>n)
}
a、sars病 吉首大學2023年程式設計競賽(樹狀陣列)
題目 這道題目的思想和這一道小石的妹子感覺有點像,有興趣的話可以去看看這一道題,這是我寫的題解 本題思路 假設我們現在處在第k個位置,那麼為了使我們可以得到最優的解,我們是不是要找到後面的所有比這高的位置裡的最優的乙個,說道這其實和上面的題目就差不多了。那麼既然我們需要後面的最優解,那麼何不倒著做呢...
2019中山大學程式設計競賽
theme 給定n m矩陣,有p個操作 將以 x1,y1 x2,y2 為左上 右下的矩陣覆蓋。之後q次詢問 以 x1,y1 x2,y2 為左上 右下的矩陣是否有全被覆蓋?solution 二維字首和。先由一次字首和 差分 計算出每個格仔被覆蓋的次數之和。然後將不為0的值 置為1,再進行字首和就算出每...
2023年湘潭大學程式設計競賽(重現賽)
a 模擬 includeusing namespace std int main return sum int main return 0 c 等差數列 includeusing namespace std int main if l r printf 0 n else return 0 d 可以這...