摘要:刚开始时没考虑到时间问题,TLE 了好多次,刚开始是这样想的,先把素数筛出来,然后再找因为有几次TLE了,不得不换一种想法。在筛素数的时候就把相应素数的下表记下来,这样就省了好多时间下面贴代码#include<stdio.h> #include <string.h>#define max 1000000 int locat[max];int main(){ int i, j, n, m = 1; memset(locat, 0, sizeof(locat)); for (i = 2; i < max; ++ i) { if (locat[i]) continue;
阅读全文
摘要:做这题要分两步:1:先判断每个节点的度是否都为偶数,若都是偶数,则有可能存在欧拉回路,只要出现一个节点的度为奇数,则可以肯定绝对没有欧拉回路2:若所有节点的度都为偶数,再用并查集判断是不是从任意的节点走都可以走到其他的任意点,若可以则有欧拉回路,若不可以则没有#include <stdio.h>#define num 1000int m, n, i, a, b, flag, du[num], set[num];void init(){ for (i = 1; i <= n; ++ i) { du[i] = 0; set[i] = i; } flag = 0;}int find
阅读全文
摘要:简单数论题 直接暴力算法#include <stdio.h>__int64 search(__int64 n, __int64 m){ __int64 sum = 0; while (n != 1) { if (n % m == 0) { sum ++; n /= m; } else break; } return sum;}int main(){ __int64 n, a, b, c, d, sum; while (scanf("%I64d", &n) && n) { a = b = c = d = 1; a += search(n,
阅读全文
摘要:整数分解: 任何一个正整数都可以表示成素数的x次方之积,所以本题就被转化成了求n ^2的素因子个数; 先把n分解得到 n = p1^e1 * p2^e2 * ......*pr^er 其中p是< n 的素数那么n 的素因子, 则n的因子个数k =(e1 + 1) * (e2 + 1) * (e3 + 1)*...... 所以:n ^2的因子数是k = (2*e1+1) * (2*e2+1)* (2*e3+1)......这个题还要注意一点就是当n是素数的时候,很显然 k *= 3,这样做得到的结果是题目要求的2倍#include <stdio.h>#include <m
阅读全文
摘要:赤裸裸的最小生成树,直接prim算法解决#include <stdio.h>#define num 501#define INF 100000000int t, n, i, j, k, min, max, tmp, map[num][num], path[num];void prim(){ for (i = 2; i <= n; ++ i) { path[i] = map[1][i]; } path[1] = -1; max = 0; for (i = 1; i < n; ++ i) { min = INF...
阅读全文
摘要:找出直系亲属Problem Description如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild,如果A,B是C的(外)曾祖父,曾祖母,则A,B是C的great-grandparenet,C是A,B的great-grandchild,之后再多一辈,则在关系上加一个great-。Input输入包含多组测试用例,每组用例首先包含2个整数n(0<=n<=26)和m(0<m<50), 分别表示有n个亲属关系和m个问题, 然后接下来是n行的形式如A
阅读全文