難得ak了,來寫一波題解
(感覺會是很長的題解qaq)
用若干"zsbd"來補全原串使得其大於等於指定長度
暴力模擬,手速題
#include#include#include#include#define max(a,b) (((a)>(b))?(a):(b))
#define min(a,b) (((a)<(b))?(a):(b))
#define ll long long
#define inf ~(1<<31)
#define def 100010
using namespace std;
int main()
minn=inf;
for(i=1;i<=n;i++)
for(j=1;j有很多手牌,一些牌有價值,一些牌沒有,有價值的牌只有身處手牌邊緣時打出才有價值,每次可以花費\(w_i\)打掉第\(i\)張牌,問在花費不超過\(m\)的情況下能得到的最大價值
顯然,每次都從邊緣出牌獲得的價值才可能最大
因為邊緣出牌的牌必定是兩段連續的區間,一段從頭開始,一段從尾開始,那麼剩下的沒出的牌肯定是乙個連續的區間
於是我們可以用乙個滑動區間來模擬未出牌的區間,每次保證在區間外花費不超過\(m\)的情況下,區間最短就好了
從頭到尾迴圈一次,複雜度\(o(n)\)
#include#include#include#include#define max(a,b) (((a)>(b))?(a):(b))
#define min(a,b) (((a)<(b))?(a):(b))
#define ll long long
#define inf ~(1<<31)
#define def 200010
using namespace std;
long a[def],b[def];
int main()
all_sum=sum;
all_val=val;
m=all_sum-m;
ans=sum=val=0;
for(l=r=1;r<=n;r++)
}printf("%lld\n",ans);
}return 0;
}
定義數列的魅力值為\(\sum^_|a_-a_|\),允許對數列的連續的一部分進行反轉操作,即讓選定區間內的所有數前後順序顛倒,求可能得到的最大魅力值
對於乙個反轉操作區間\([l,r]\),很容易證明\([l+1,r-1]\)這個區間內的魅力值是不變的
那麼問題變成了\(a_l, a_, a_r, a_\)這四個數之間的關係了
對兩對單點魅力值列出算式:
令\(i=l-1, j=r\)
改變前:\(ans1=|a_i-a_}|+|a_j-a_|\)
改變後:\(ans2=|a_i-a_j|+|a_-a_|\)
那麼要求的就是\(ans2-ans1\)的最大值
\(ans2-ans1=|a_i-a_j|+|a_-a_|-|a_i-a_}|-|a_j-a_|\)
給\(a\)排個序,可以去掉第乙個絕對值,整理一下
原式\(=a_i-|a_i-a_|+|a_-a_|-a_j-|a_j-a_|\)
因為\(a_i\)和\(a_\)以及\(a_j\)和\(a_\)的關係飄忽不定
所以列舉\(a_\)和\(a_\)的大小關係
1)\(a_ > a_\)
原式\(=(a_i+a_-|a_i-a_|)-(a_j+a_+|a_j-a_|)\)
\(=2*min(a_i, a_)-2*max(a_j,a_)\)
2)\(a_ \leq a_\)
原式\(=(a_i-a_-|a_i-a_|)-(a_j-a_+|a_j-a_|)\)
分情況列舉一下,可知\((a_i-a_-|a_i-a_|) \leq 0\)且\((a_j-a_+|a_j-a_|) \geq 0\)
那麼這種情況一定為負
綜上所述,要找的就是\(2*min(a_i, a_)-2*max(a_j,a_)\)
那麼既然\(i且\(a_i>a_j\),就直接從大到小排個序,然後從後往前列舉一遍,維護一下i之後的\(max(a_j,a_)\)就好了
#include#include#include#include#define max(a,b) (((a)>(b))?(a):(b))
#define min(a,b) (((a)<(b))?(a):(b))
#define ll long long
#define inf ~(1<<31)
#define def 500010
using namespace std;
struct nodea[def],b[def];
int main()
memcpy(b,a,sizeof(a));
sort(a+1,a+n+1,[&](node a,node b));
ans=0;
minn=inf;
maxx=0;
for(i=n;i>=1;i--)
if(a[i].y在不同的距離上有很多堆東西,每次可以按照輸入順序拿走\(m\)個,如果拿滿了就回到起點(距離為0的點),問拿走所有東西的需要的距離是多少
看起來像乙個\(dp\)或者貪心,其實認真讀題會發現,順序是固定的
那麼這題就是乙個模擬了
需要注意的是,每個點可能不止來回一次(在這wa了幾發)
#include#include#include#include#define max(a,b) (((a)>(b))?(a):(b))
#define min(a,b) (((a)<(b))?(a):(b))
#define ll long long
#define inf ~(1<<31)
#define def 100010
using namespace std;
ll a[def],b[def];
int main()
a[now]=max(0,a[now]-b[now]);
}int main()
} return 0;
}
考試每題亂選答案,但是答案填錯了,填到了下一題的位置,每題有\(a_i\)個選項,問得分期望
3種情況,分情況暴力列舉
1)\(a_i
得分概率\(=\frac*\frac}\)
2)\(a_i=a_\)
得分概率\(=\frac\)
3)\(a_i>a_\)
得分概率\(=\frac}*\frac}\)
#include#include#include#include#define max(a,b) (((a)>(b))?(a):(b))
#define min(a,b) (((a)<(b))?(a):(b))
#define ll long long
#define inf ~(1<<31)
#define def 100010
using namespace std;
double a[def];
int main()
if(s[0]>'9')
return s;
}int main()
{ long _=1,__=1,i;
ll maxx=1,n;
string s;
for(((1)?scanf("%ld",&_):eof);_;_--,__++){
cin>>s;
cout《呼~(長呼一口氣)
又到了摸魚的時間了呢
杭州電子科技大學ACM 1081
input input consists of several lines of integer numbers.the first line contains an integer n,which is the number of cases to be tested,followed by n ...
杭州電子科技大學acm 2010
problem description 春天是鮮花的季節,水仙花就是其中最迷人的代表,數學上有個水仙花數,他是這樣定義的 水仙花數 是指乙個三位數,它的各位數字的立方和等於其本身,比如 153 1 3 5 3 3 3。現在要求輸出所有在m和n範圍內的水仙花數。input 輸入資料有多組,每組佔一行,...
杭州電子科技大學acm 2005
input 輸入資料有多組,每組佔一行,資料格式為yyyy mm dd組成,具體參見sample input 另外,可以向你確保所有的輸入資料是合法的。output 對於每組輸入資料,輸出一行,表示該日期是該年的第幾天。define crt secure no warnings include in...