转自: http://acmicpc.info/archives/597#more-597

本站曾经转载“弱校ACM奋斗史”令许多ACMer产生了比较大的共鸣,这是因为ACMer对比赛有特殊的情结;ACMer不再参加比赛也和体育竞 赛选手一样称之为退役,这可能是因为ACMer和体育选手一样付出了巨大的辛劳。本文进一步汇总了ACMer的感想帖和退役帖,部分内容可能并不准确,欢 迎纠正和补充本文。

感想帖
ACM-ICPC比赛随想 by 刘汝佳 http://shexinwei.blogbus.com/logs/74680526.html
ACM是不务正业? by ECUST ht[……]

继续阅读

考完试了,也是时候补上退役帖了。

考虑了一阵要怎么写,鉴于本文的目的主要是希望给后来的校队成员或者想参加这个竞赛的同学一个借鉴,最后还是决定用Q&A的形式。

打ACM/ICPC有什么好处

我觉得确切而言应该问把时间花在这上面有什么好处。

  1. 提升算法设计/coding能力。而这直接面向IT公司的招聘
  2. 获奖无论在哪里都是加分点。
  3. 结交这个领域很优秀的人。这条有多重要,自己感受一下吧。

如果只是抱着划划水的态度参加,几乎不投入时间,我觉得上面任意一条都得不到。

我为什么要打ICPC

  1. 预科的时候校队选拔第4,可以说算法底子还算是好的(至少在浙大)[……]

继续阅读

刚刚结束了在度厂一年的实习,终于进入了期待已久的休假期,接下来集中写写毕设论文,准备一下答辩的事宜。

 

在这里扯一点淡,也算是纪念一下被狗吃了的青春,另一方面也是希望能够对同样正在经历之前这些阶段的人有一些帮助吧。这些可能对各方面比较普通的同学有一些帮助,各种牛逼大神请自动忽略。。。。

 

关于找工作

先说说找工作,我之前对自己的工作定位大致是在BAT或者是二线一点但是氛围和口碑很好的互联网公司,title就定位在研发工程师上了(RD)。

关于面试的干货就两个字:算法。

这真的是亲身体会,我大概面过10多次(实习和正式加在一起),[……]

继续阅读

暴力搜索。。表示写的有点挫= =。时间花的好多。。一共有九种转换的方法,由于转换四次的话又会转换回到初始状态。所以枚举每个方法转换[0,3]次,然后再写两个函数判断旋转的过程。。记得回溯的时候需要将状态回到上一层。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <algorithm>
using namespace std;
char cmd[][1[......]

继续阅读

= =。好吧。。这题做的时候就不知道怎么做。。还是看大牛博客才会的。。推荐:http://starforever.blog.hexun.com/2097115_d.html

枚举四个矩形的排列方式,再枚举每个矩形的放置方式。。由于题目中说一共就只有6种会出现的方法= =。所以。把枚举出来的序列进行对每一个

方法的计算比较就可以了。。不会的,可以看上述blog的图解/

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
us[......]

继续阅读

这题要判断给出数字是否能构成几个数能满足题中所规定的式子要求。。一开始我想着是怎么通过这些数字来枚举每一行的数。。发现太麻烦了,而且复杂度很高。。后来发现前两个数的位数都是确定的,一个三位数和一个两位数,那我们就可以枚举[100,999]和[10,99】之间的数,然后通过模拟运算判断算出的答案是否是规定的数字中的。。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int flag[10[......]

继续阅读

求给定字符串中最长的回文串什么,要求输出的是原来文章中的字符串。我们可以将字符串预处理,删除掉多余的字符,并记录每个字符的位置

然后开始枚举回文串。从第i个字符开始,分别判断(i-1,i+1)和(i,i+1)开始的字符串向两边不断的延伸。。记录位置即可

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int INF = 0x7f7f7f7f;
char s[20010[......]

继续阅读

贪心。假设每个牛都有一块木板,则长度为lenmax-lenmin。但是现在我们只要m块。所以我们要尽可能的减去最长的空隙,那么剩下来的才会是

最小的长度/所以首先按照牛棚之间的间隙排序,然后累加相减就可以了。。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main()
{
    int m,s,c,i;[......]

继续阅读

贪心。按照每加仑的单价从小到大排序,这样才能保证花更少的钱买更多的牛奶。然后暴力就可以了。。

#include <iostream>
#include <algorithm>
#include <string>
#include <cstdio>
#include <cstring>
using namespace std;
const int INF = 0x7f7f7f7f;
struct T
{
    int p,a;
}s[5010];
bool cmp(T x,T y)
{
    return[......]

继续阅读

这题的思路跟上一题差不多。。暴力枚举就能过。。枚举s+1开始的数,然后判断[2,10]进制中是否超过两个进制使得该数是回文数。。直到n个为止。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 5010;
bool isplind(int t,int i)
{
    int k=0,a[100];
    if(t==0) a[k++]=t;[......]

继续阅读

这题只要枚举1-300之间,然后判断i*i在b进制下是否为回文数,是的话,记录这两个数的b进制表示方式。。= =一开始写的时候没看清,直接输出了十进制。。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 5010;
char s[]={"0123456789ABCDEFGHIJK"};
char a[1000];
bool ispli[......]

继续阅读

给出一个数字,问是否能根据规则匹配字典中一个字符串。。如果我们按照每一位来枚举每一种可能的话,那样可能就会超时。。

因为字典中最多只有5000个字符串,所以我们可以枚举字典中的字符串将其按照规则转换成数字,判断是否跟输入的相等就可以了。

#include <iostream>
#include <algorithm>
#include <map>
#include <string>
#include <cstdio>
#include <cstring>
#include <stdlib.h>[......]

继续阅读

这题就是个模拟- -。把题目中的七种转换方式模拟出来,判断是否相等就可以了。。细心点就不会错的。。

#include <iostream>
#include <algorithm>
#include <map>
#include <string>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
using namespace std;
const int INF = 0x7f7f7f7f;
int n;
bool judge[......]

继续阅读

这题有点贪心的思想,将有交集的区间合并,然后求最长连续时间和最长不连续时间就可以了。。

我们先将区间按照起始时间从小到大的时间排序,假设(a,b)和(c,d),如果c在(a,b)内,则区间长度可以更新为(a,max(b,d)).如果不在(a,b)区间,

则c-b为不连续时间,并一直往下更新。。

#include <iostream>
#include <algorithm>
#include <string>
#include <cstdio>
#include <cstring>
using namespac[......]

继续阅读

因为这题可以从不同的地方把项链截断,然后向两边开始找相同的珠子。。所以我们可以想到可以把三串项链合并,然后枚举中间一串中截断的位置,向前向后分别找。。记录个数就可以了。。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int i,j,k,n;
    char s[1200];
    scanf("%d",&n);[......]

继续阅读

这题可以直接暴力来解决。枚举1900~1900+n-1年,每年枚举十二个月,再枚举判断每个月的天数。。至于周几,就可以用一个变量不断的叠加。。数据量不大,所以肯定能过- -。

 

#include"stdio.h"
int f(int n)
{
    if(n%4==0&&n%100!=0||n%400==0)
        return 1;
    return 0;
}
int main()
{
    int n,i,a[8]={0},j,k,m=0;
    int b[2][12]={31,28,31,3[......]

继续阅读

这题就是模拟每个人送钱和收钱的过程,要注意的地方是,由于收到的钱都是整数,所以在每一次送钱之后,送钱的人需要加上无法除尽余下的钱。。

#include <iostream>
#include <algorithm>
#include <map>
#include <string>
#include <cstdio>
using namespace std;
const int INF = 0x7f7f7f7f;
map<string,int>mp;
int main()
{
    int n,m,t[......]

继续阅读

前言:刷了几个月,快把我们oj上的usaco刷完了- -,还有几题还没有想出来,唉。。好多题也都是看了报告才做出来的。。现在我对这一页的题做个总结。有什么错误的地方希望以后看得人指出。。仅供借鉴。(题号是我们oj从2300开始,我就不发题目和链接了。。:)

 

这一题很早之前做的了= =。。主要就是按照规则,求出对应的值,然后取余判断相等就可以了。。题目很简单,就不加赘述。

#include"stdio.h"
int main()
{
    char a[7],b[7];
    int i,c=1,d=1;
    scanf(&quo[......]

继续阅读

通项:F(n)=F(n-1)+F(n-2);

数学公式:a_n= \frac{1}{\sqrt{5}}\left [ {\left ( {\frac{1+\sqrt{5}}{2}} \right )^n-{}\left ( {\frac{1-\sqrt{5}}{2}} \right )^n} \right ]

矩阵表示:<br /><br /><br />
\begin{pmatrix} F_{n+2} & F_{n+1} \\ F_{n+1} & F_{n} \end{pmatrix}<br /><br /><br />
=<br /><br /><br />
\begin{pmatrix} 1 & 1 \\ 1 & 0 \end{pmatrix}^{n + 1}<br /><br /><br />

求和1):f(0)+f(1)+f(2)+…+f(n)=f(n+2)-1

 

求和2):C(n,0)f(0)+C(n,1)f(1)+…+C(n,n)f(n)=f(2n)  (**)

奇数项求和:f(1)+f(3)+f(5)+..f(2n-1)=f(2n)

 

偶数项求和:f(2)+f(4)+f(6)+…+f(2n)=f(2n+1)-1

 

平方求和:f(0)^2+f(1)^2+…+f(n)^2=f(n)*f(n+1)   [……]

继续阅读