摘要:
题目大意:求点(0,0),(n,m),(p,0)三点构成的三角形内部(不包括边界)整点的个数。解题过程:1.直接枚举纵坐标,然后算出两条直线上纵坐标为y的点的横坐标,然后他们中间的点就是符合要求的。边界处理超级恶心。要特判直线没有斜率的情况,n=0或者p=n的情况。搞了好几次才AC。2.nocow上... 阅读全文
摘要:
第一题:题目描述:淘汰赛制是一种极其残酷的比赛制度。2n名选手分别标号1,2,3,…,2n-1,2n,他们将要参加n轮的激烈角逐。每一轮中,将所有参加该轮的选手按标号从小到大排序后,第1位与第2位比赛,第3位与第4位比赛,第5位与第6位比赛……只有每场比赛的胜者才有机会参加下一轮的比赛(不会有平局)... 阅读全文
摘要:
第一题:题目大意:N层楼,K个人,M个箱子在1楼,给出K个人的初始状态(在第几楼,正在向上走还是向下走,向上走的人手里已经有箱子),每次移动一层楼,求把所有箱子(手里拿着的不算在M里)全部搬到顶楼的最少时间。K≤500000,M≤10^9解题过程:1.首先想到可以二分时间t,然后判断在时间t里能否搬... 阅读全文
摘要:
第一题:题目大意:给出N(N<=50)个小于1000的正整数Ai,和一个正整数max,和一个整数cur,从前往后依次对每个Ai,可以让cur+Ai或者cur-Ai,但是结果不能大于max,也不能小于0.求最终的cur的最大值。解题过程:1.一开始直接写了个爆搜+剪枝(ans=max或者ans+sum... 阅读全文
摘要:
编译时: 1.定义结构体时没加分号。 2.指针取地址没加 &; Runtime Error: 1.scanf 没加 &; 2.环断成链或者前向星存无向边的时候数组开的太小; Wrong Answer: 1. 1左移30位以上 没强制转换成 long long; 2. if ()里 用 &,^, | 阅读全文
摘要:
2次dfs的方法: 1 void dfs(int u,int step) 2 { 3 int tmp=0; 4 if (step>t) 5 { 6 max_dist=step; 7 max_point=u; 8 } 9 for ... 阅读全文
摘要:
1 void LICS() 2 { 3 for (int i=1;ima)12 ma=f[i-1][j];13 ans=max(ans,f[i][j]);14 }15 }16 printf("%d\n"... 阅读全文
摘要:
第一题:题目大意:求最长公共上升子序列(LICS);解题过程:1.一开始想到模仿求最长公共子序列的方法,F[i][j]表示A串前i个,B串前j个的最长公共子序列,很明显当A[i]!=B[j]时,F[i][j]=max (F[i-1][j] , F[i][j-1]);当A[i] =B[j]的时候,由于... 阅读全文
摘要:
题目大意:在一个有向图中,每两点间通信需要一定的时间,但同一个强连通分量里传递信息不用时间,给两点u,v求他们最小的通信时间。解题过程:1.首先把强连通分量缩点,然后遍历每一条边来更新两个强联通分量之间的距离。。2.直接Floyd会超时,应该用dijstra或者spfa做k次最短路。犯的错误:前向星... 阅读全文
摘要:
第一题:题目大意:一个n的全排列A[i]是单峰的,当且仅当存在某个x使得A[1]A[x+1]>...>A[n]。 试求 n 的单峰全排列的个数 mod 1234567。n<=2 000 000 000解题过程:1.首先所谓的”峰“必定是数字n,那么根据n的位置来讨论,可以发现,n在第i个位置的方案数... 阅读全文
摘要:
1 void dfs(int u,int father) 2 { 3 int child=0; 4 dfn[u]=low[u]=++dfs_clock; 5 6 for (int c=head[u];c;c=nxt[c]) 7 { 8 in... 阅读全文
摘要:
1 int get_SG(int x) 2 { 3 if (SG[x]!=-1) 4 return SG[x]; 5 bool v[110]={0}; 6 for (int i=1;i=0) 8 v[get_SG(x-s[i])]=1... 阅读全文
摘要:
1 void tarjan(int u) 2 { 3 dfn[u]=low[u]=++dfs_clock; 4 stack_push(u); 5 6 for (int c=head[u];c;c=nxt[c]) 7 { 8 int v=to... 阅读全文
摘要:
第一题:题目大意:使得 x^x 达到或超过 n 位数字的最小正整数 x 是多少?n=n;2.考虑到ln(x)/ln(2)+1是单调增的,所以只要二分x就可以快速求解。第二题:题目大意:给出n个有序队列,求出所有数中最小的m个。n,m<=10 000解题过程:1.这题也是NOI导刊看到过的。。写一个小... 阅读全文
摘要:
第一题:题目大意:求出1-10^n 这些数中,包含数字3的有多少个。 n<=1000;解题过程:1.这题一看就是高精度+递推。。如果n=1000,那么假设个位是3,其他999位任意。。那么就有10^999个数了。2.用F[i] 表示 所有位数为 i的数中 有多少个包含3的,g[i] 表示 1-10^... 阅读全文
摘要:
1 int get_kth(int l,int r) 2 { 3 if (l==r) 4 return a[r]; 5 int i=l,j=r,mid=a[(l+r)>>1]; 6 while (imid)11 j--;12 ... 阅读全文
摘要:
1 void my_sort(int l,int r) 2 { 3 int i=l,j=r,mid=a[(l+r)>>1]; 4 while (imid) 9 j--;10 if (il)18 my_sort(l,j);19 ... 阅读全文
摘要:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 9 const int n=729,m=324; 10 bool mx[2000][2000]... 阅读全文
摘要:
dancinglink简直是求解数独的神器,NOIP2009最后一题靶形数独,DFS各种改变搜索顺序都没法过,最后还是用了卡时过得。用dancinglink写,秒杀所有数据,总时间才400ms不到。。(虽然还不是很清楚为什么会快)。一开始还是先看这个blog,图文都非常清晰http://www.cn... 阅读全文
摘要:
第一题:题目大意:二进制数 n mod m 的结果是多少? n 的长度(二进制数的位数)<=200 000; m 的长度(二进制数的位数)<=20。解题过程:1.我的算法是直接高精度模拟,但是数据坑爹地有前导0,有前导0的4个点都WA了。。高精度除法的编程复杂度确实有点。2.标程算法要简单的多,考虑... 阅读全文
摘要:
第一题:题目大意:给出N个人之间转账的手续X%,求出A转给B至少要多少钱才能使B得到100元。结果保留8位小数;N7 2 6 3 4 1 5,对应1 2 3 4 5 6 7很明显可以得到7->1->6->3->4->5->7和2->2两个循环节,则答案就是位置7和位置1交换,位置1和位置6……,每次... 阅读全文
摘要:
第一题:题目大意:和day1一样,给出m个小于n的数,求出出现次数大于mdiv 2的数。数据范围加大,1<=n<=2^31 1<=m<=3000000解题过程:1.一开始写了个数组模拟链表hash,按mod指数p分类,用一个数组记录每一类的个数,如果每一类个数全部都小于等于一半,那么无解,如果有一个... 阅读全文
摘要:
第一题:题目大意:给出m个小于n的数,求出出现次数大于mdiv 2的数。1pre),其次这个分数不能比当前剩下待拆分的值(a/b)大,即 1/x x>b/a最后如果当前还能拆dep个分数,由于这个分数必定比剩下的那些要大,所以dep/x> a/b --> x < (b*dep)/a;3.第一次写的... 阅读全文
摘要:
题目大意:设 2n 张牌分别标记为 1, 2, ..., n, n+1, ..., 2n,初始时这 2n 张牌按其标号从小到大排列。经一次洗牌后,原来的排列顺序变成 n+1, 1, n+2, 2, ..., 2n, n。即前 n 张牌被放到偶数位置 2, 4, ..., 2n,而后 n 张牌被放到奇... 阅读全文
摘要:
第一题:题目大意:给出n种物品和每种物品的件数,求拿k件的方案数。Nx->y->t,要么是s->y->x->t,两种情况取权值小的那个更新答案即可。算是比较简单的题吧。 阅读全文