\documentclass[aspectratio=169,hyperref={pdfencoding=auto,psdextra}]{beamer} \usepackage[utf8]{inputenc} \usepackage{CJKutf8} \usepackage{ulem} \usepackage{graphicx} \usepackage{fancyvrb} \usepackage{amsmath} \usepackage{multicol} \usetheme{Malmoe} \usecolortheme{default} \begin{CJK*}{UTF8}{gbsn} \title{「有了他我们无法活」} \subtitle{——炮打司令部} \author{Chris Xiong} \date{2017-07-28} \begin{document} \frame{\titlepage} \begin{frame} \frametitle{「有了他我们无法活」} \framesubtitle{Outline} \begin{itemize} \item 采访 \item Faster I/O \item C++11 / 14 \item Common pitfalls \item Bitmask \item Bitmask+dp \item 如何让队友认错之如何表扬队友 \end{itemize} \end{frame} \begin{frame} \frametitle{采访} \framesubtitle{\sout{a.k.a. 教学质量检查}} \begin{itemize} \item 上次课讲的内容大家都听懂了吗?\pause \item 什么?不懂?\pause \item 那还记得上次讲的什么吗?\pause \item 对不起,这次没有A Water Problem \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Faster I/O} Why? \begin{itemize} \item No need to parse the format string \item Makes better use of the I/O buffer \end{itemize} \pause How? \begin{itemize} \item \verb|.sync_with_stdio(false)| \item \verb|getchar()| \item \verb|fread()| \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Faster I/O} \framesubtitle{Faster input - getchar()} \begin{Verbatim} int readint() { int ret=0; char ch=getchar(); while(ch<'0'||ch>'9') ch=getchar(); do { ret=ret*10+ch-'0'; ch=getchar(); }while(ch>='0'&&ch<='9'); return ret; } \end{Verbatim} \end{frame} \begin{frame}[fragile] \frametitle{Faster I/O} \framesubtitle{Even faster input - fread()} \begin{Verbatim} char s[SOME_LARGE_VALUE]; size_t ptr,len; len=fread(s,1,SOME_LARGE_VALUE,stdin); int readint() { //replace getchar() with s[ptr++] ... } \end{Verbatim} \pause Reading real numbers? \end{frame} \begin{frame}[fragile] \frametitle{Faster I/O} \framesubtitle{Faster output} \begin{itemize} \item Print digit by digit \item Save to buffer then \verb|fwrite()| to \verb|stdout|. \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{C++11 / 14 - Useful features that reduces coding efforts} \framesubtitle{C++11} \begin{itemize} \item Uniform initialization \begin{Verbatim} struct S{int a;double b;char c;}; S s{1,2.0,'3'};//s.a==1; s.b==2.0; s.c=='3'; \end{Verbatim} \item Type inference \begin{Verbatim} std::set s; auto a=1; auto it=s.begin(); \end{Verbatim} \item Range-based for loop \begin{Verbatim} std::vector v; for(auto &i:v)... \end{Verbatim} \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{C++11 / 14 - Useful features that reduces coding efforts} \framesubtitle{C++11 cont'd} \begin{itemize} \item Lambda functions \begin{Verbatim} std::sort(p+1,p+nv,[o=p[0]](const v3d& a,const v3d& b)->bool { double cross=(a.x-o.x)*(b.y-o.y)-(b.x-o.x)*(a.y-o.y); if(sgn(cross))return sgn(cross)>0; double la=hypot(a.x-o.x,a.y-o.y); double lb=hypot(b.x-o.x,b.y-o.y); return la> v; \end{Verbatim} \item \verb|long long int|\\ Yeah, it was not standard until C++11 (C99). \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{C++11 / 14 - Useful features that reduces coding efforts} \framesubtitle{C++11 STL} \begin{itemize} \item Hash tables\\ \verb|std::unordered_map, std::unordered_set| \item \verb|std::tuple| \item Regular expressions \item Threading \item Random number generators \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{C++11 / 14 - Useful features that reduces coding efforts} \framesubtitle{C++14} C++14 is a small extension to C++11. \begin{itemize} \item Improved \verb|auto| \begin{Verbatim} auto factorial(int x){ if(x==1)return 1; return x*factorial(x-1); } \end{Verbatim} \item Improved lambda functions \begin{Verbatim} auto lambda=[](auto x,auto y){return x+y;}; \end{Verbatim} \item Lambda capture expressions \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Common pitfalls} \begin{itemize} \item Huge global variable causes linkage error. \begin{Verbatim} int a[1LL<<12][1LL<<48],b[1LL<<12][1LL<<48],c[1LL<<12][1LL<<48]; int main(){c[0][0]=1;} \end{Verbatim} Compilation result: \begin{Verbatim} g++ -Wall -std=c++14 -g -o "test" "test.cpp" -lm (in directory: /home/chrisoft/code) /tmp/ccOkFQ7A.o: In function `main': /home/chrisoft/code/test.cpp:2:(.text+0x6): relocation truncated to fit: R_X86_64_PC32 against symbol `c' defined in .bss section in /tmp/ccOkFQ7A.o collect2: error: ld returned 1 exit status Compilation failed. \end{Verbatim} \item relocation of \verb|.bss| section exceeding platform limitations. \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Common pitfalls} \begin{itemize} \item Stack size is very small compared to heap \begin{Verbatim} int main(){int a[100000000];...} \end{Verbatim} \item Results in stack overflow. \item Math library \item \verb|memset()| TLE \end{itemize} \end{frame} \begin{frame} \frametitle{Bitmask} \begin{itemize} \item A set in its binary form \item Codeforces 550B\pause \item Codeforces 579A \end{itemize} \end{frame} \begin{frame} \frametitle{Bitmask+dp} \begin{itemize} \item Concept of a \textbf{state}\pause \item Value function\pause \item Initial state \end{itemize} \end{frame} \begin{frame} \frametitle{Bitmask+dp} \begin{itemize} \item TSP(Travelling Salesman Problem) \item Given a list of cities and the distances between each pair of cities, what is the shortest possible route that visits each city exactly once and returns to the origin city?\pause \item f[s][i]: s: set of visited cites, i: current city \item functional equation: $ f[s][i]= \displaystyle \min_{k:N}f[s-{i}][k]+dist[k][i] (k\notin s) $ \item Initial state: f[U][0]=0;\pause \item Variant\pause \item Loop direction \end{itemize} \end{frame} \begin{frame} \frametitle{Bitmask+dp} \begin{itemize} \item TSP: POJ 3311 \item Counting: POJ 3254 \item f[i][s]: row i with set s occupied \end{itemize} \end{frame} \begin{frame} \frametitle{如何让队友认错之如何表扬队友} \framesubtitle{队友需要表扬才能更有生产力} \includegraphics[scale=0.75]{zz1.png} \end{frame} \begin{frame} \frametitle{如何让队友认错之如何表扬队友} \framesubtitle{光辉事迹} \begin{itemize} \item 比赛中要其他队伍帮忙写对拍 \item 比赛中睡3小时觉 \item 全权负责实验室事务 \item 发说说 \end{itemize} \end{frame} \begin{frame} \frametitle{宇宙智障的说说} \begin{multicols}{2} 就终于考完试了\_(:зゝ∠)\_\\ 然而暑假这种?不存在的(滑稽\\ 还是献给辣鸡的(划掉)acm好了\\ 学期结束,事儿反而就又突然多了起来\\ 假装已有计划的专题训练\\ 各种姿势被虐的多校联合\\ 以及暑期集训的萌新教学\\ 与开始正式接手的实验室各种大小事务的锅\\ 相信,一定会是个忙碌的七八月份吧\\ 希望,也同会是个充满收获的七八月\\ 就也会更期待着\\ 在八月初的短假里\\ 与小姐姐愉快的玩耍呢\\ 总之,一定会是个不平凡的假期\\ 再以及,小姐姐寄的明信片也终于到了:)\\ \end{multicols} \end{frame} \begin{frame} \frametitle{宇宙智障的说说} \includegraphics[scale=0.5]{zz2.png} \end{frame} \begin{frame} \frametitle{为何要表扬队友} \begin{itemize} \item 让恬不知耻的队友知道错(似乎对宇宙智障无效) \item 叫醒队友 \item \sout{鼓励}队友\sout{WA更多题} \end{itemize} \end{frame} \begin{frame} \frametitle{放假事宜} \begin{itemize} \item 宇宙智障已经畏罪潜逃 \item 宇宙智障8月7日将被扭送 \item 大家一定不用比宇宙智障回来的早 \end{itemize} \end{frame} \end{CJK*} \end{document}