\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}