上古退役選手康復訓練1 CSP2020J 2

2022-05-05 12:27:11 字數 1619 閱讀 8534

你沒看錯,乙個前noi ag選手來做普及組了,馬上打icpc了我也準備練習一些。

連pj都不會了,得分:100+100+30+100=330,甚至比初三還菜,nowcoder資料,思路也應該是這個分。

寫一發題解吧(t3就寫30分的)

t1奇數直接輸出-1,偶數按二進位制位拆分

#includeusing

namespace

std;

intn;

intmain()

t2用個筒存一下每個分數上有多少人,每次加人的時候從大到小搜尋一遍即可

#includeusing

namespace

std;

int n,w,a[601

];int

main()

else t-=a[j];

}}

t3不會做,只會暴力,就是開乙個棧,每次遇到 | 或 & 彈出棧頂兩個元素運算,遇到 ! 彈出棧頂乙個元素運算,裸暴力複雜度o(n^2)。看上去像是乙個動態dp,但我早就不會寫那個玩意了。

#includeusing

namespace

std;

int n,m,tp,sz,a[100007],st[100007

];string

s;int

main()

if(s[i]=='

!')st[tp]^=1,i++;

if(s[i]=='

&')t1=st[tp--],t2=st[tp--],st[++tp]=(t1&t2),i++;

if(s[i]=='

|')t1=st[tp--],t2=st[tp--],st[++tp]=(t1|t2),i++;

while(s[i]=='

')i++;

}printf(

"%d\n

",st[tp]),a[x]^=1

; }

}

t470分做法很容易想到f[i][j]表示走到第j列,在第i行準備轉彎的最大值,於是列舉上一行準備轉彎的地方,對矩陣每一列做字首和即可。

100分做法實際上是70分的優化,其實不需要列舉最後一次,直接f[i][j][0/1]表示在i,j往上/下走,從上乙個方向推過來就行了,注意細節。

#includeusing

namespace

std;

typedef

long

long

ll;int

n,m;

ll a[

1005][1005],f[1005][1005][2

];int

main()

f[n][j][

1]=max(f[n][j-1][0],f[n][j-1][1])+a[n][j];

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

f[i][j][

1]=max(f[i+1][j][1],max(f[i][j-1][0],f[i][j-1][1]))+a[i][j];

}printf(

"%lld

",max(f[n][m][0],f[n][m][1

]));

}

乙個ACM底層參賽選手的退役感言

大概是大學生活最有意義最有回憶的一年了吧,藉著年底的最後幾天寫一下退役總結吧。直到現在還是感覺自己是個還在打比賽的選手。在高中畢業的時候選專業的時候糾結很久,本來在高中想的是奔著醫學或者生物學方向選的專業,因為那時自認為是乙個在這方面比較有天賦的人,但是最終也是沒有選吧,因為種種原因吧,最後還是選擇...