summaryrefslogtreecommitdiff
path: root/sduacm2017/lec2/lec.tex
diff options
context:
space:
mode:
authorGravatar Chris Xiong <chirs241097@gmail.com> 2019-02-10 11:16:07 +0800
committerGravatar Chris Xiong <chirs241097@gmail.com> 2019-02-10 11:16:07 +0800
commit9d3c8c0e6e1a7ba43bf3dc19350d1dca68b657a3 (patch)
tree339de0698c13e1763d3361d70fb1266621025c91 /sduacm2017/lec2/lec.tex
downloadweb-9d3c8c0e6e1a7ba43bf3dc19350d1dca68b657a3.tar.xz
Initial commit.
Diffstat (limited to 'sduacm2017/lec2/lec.tex')
-rw-r--r--sduacm2017/lec2/lec.tex312
1 files changed, 312 insertions, 0 deletions
diff --git a/sduacm2017/lec2/lec.tex b/sduacm2017/lec2/lec.tex
new file mode 100644
index 0000000..ae972b0
--- /dev/null
+++ b/sduacm2017/lec2/lec.tex
@@ -0,0 +1,312 @@
+\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<int> s;
+ auto a=1;
+ auto it=s.begin();
+ \end{Verbatim}
+ \item Range-based for loop
+ \begin{Verbatim}
+ std::vector<int> 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<lb;
+ }
+);
+ \end{Verbatim}
+ \item Right angle bracket
+ \begin{Verbatim}
+ std::vector<std::pair<int,int>> 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}
+