你沒看錯,乙個前noi ag選手來做普及組了,馬上打icpc了我也準備練習一些。
連pj都不會了,得分:100+100+30+100=330,甚至比初三還菜,nowcoder資料,思路也應該是這個分。
寫一發題解吧(t3就寫30分的)
t1奇數直接輸出-1,偶數按二進位制位拆分
#includeusingnamespace
std;
intn;
intmain()
t2用個筒存一下每個分數上有多少人,每次加人的時候從大到小搜尋一遍即可
#includeusingnamespace
std;
int n,w,a[601
];int
main()
else t-=a[j];
}}
t3不會做,只會暴力,就是開乙個棧,每次遇到 | 或 & 彈出棧頂兩個元素運算,遇到 ! 彈出棧頂乙個元素運算,裸暴力複雜度o(n^2)。看上去像是乙個動態dp,但我早就不會寫那個玩意了。
#includeusingnamespace
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往上/下走,從上乙個方向推過來就行了,注意細節。
#includeusingnamespace
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底層參賽選手的退役感言
大概是大學生活最有意義最有回憶的一年了吧,藉著年底的最後幾天寫一下退役總結吧。直到現在還是感覺自己是個還在打比賽的選手。在高中畢業的時候選專業的時候糾結很久,本來在高中想的是奔著醫學或者生物學方向選的專業,因為那時自認為是乙個在這方面比較有天賦的人,但是最終也是沒有選吧,因為種種原因吧,最後還是選擇...