摘要:
思路来自于:http://www.cnblogs.com/wuyiqi/archive/2011/11/06/2238530.html枚举两个多边形的两个点组成的直线,判断能与几个多边形相交因为最佳的直线肯定可以经过某两个点(可以平移到顶点处),所以暴力枚举两个点就好了如果有模版的话,写代码就快多了。代码如下:#include #include #include #include #include #include #include #include #include #include #define LL long long
#define eps 1e-8
#defi...
阅读全文
posted @ 2013-08-17 15:01
Primo...
阅读(227)
推荐(0)
摘要:
这道题比赛中没做出来,赛后搞了好久才出来的,严重暴露的我薄弱的数学功底,这道题要推公式的,,,有类似于1*a+2*a^2+3*a^3+...+n*a^n的数列求和。最后画了一张纸才把最后的结果推出来。::(x*M^x)/N.而且通过这道题我发现有些数学函数还不如直接循环来的快,例如这道题中求x的值的时候。【我在此收回前面的话,昨天是oj的问题,今天我又交了一遍log的代码,耗时变成了0ms了。。。OMG】方法一:int x = int(log(n)/log(m)+0.5); if(_pow(m,x)=n) break;耗时0ms代码如下:#include #include...
阅读全文
posted @ 2013-08-16 20:56
Primo...
阅读(432)
推荐(0)
摘要:
好文章转自:http://blog.tianya.cn/blogger/post_show.asp?BlogID=287129&PostID=3668453scanf详解 scanf 原型: # include int scanf( const char *format, ... ); 函数 scanf() 是从标准输入流 stdin 中读内容的通用子程序,可以读入全部固有类型的数据并自动转换成机内形式。scanf() 是 printf() 的补函数。 在 C99 中,format 用 restrict 修饰。 format 指向的控制串由以下三类字符组成: ...
阅读全文
posted @ 2013-08-15 21:39
Primo...
阅读(505)
推荐(0)
摘要:
搞死人的题目,,,就是在n*n的方格中找路径长度为L的回路。开始的思路值适合n为偶数的情况,而忽视了奇数的case,所以wa了一次。然后找奇数case的策略,代码从70多行变成了100多,然后改了又改,自己在下面测了好久,交上去1y,但心里却无成就感。这样的一个题目,提不上什么思路,可以算作是乱搞的,下次比赛中再次碰到类似甚至同样的题目,我并不能保证能写出来。代码如下:#include #include #include #include #include #include #include #include #include #define M 1005 using n...
阅读全文
posted @ 2013-08-15 20:47
Primo...
阅读(171)
推荐(0)
摘要:
水题一个,代码挫了一下:题意不好理解。你去一个洞窟内探险,洞窟内有许多宝石,但都有魔法守护,你需要用魔法将它们打下来。每个宝石都有自己的防御等级,当你的魔法超过它的防御等级时它就会被你打下来。但是,当它被你打下来的时候,它会反弹你的魔法。如果反弹的魔法过强,你就会被自己的魔法杀死。很不幸的是,你的魔法是群体性的,你不能选择攻击谁,只要防御等级低于你魔法水平的宝石都会被你打下来。并且每个都会反弹你的魔法。你可以假设你的魔法水平无限大,但你躲避反弹的魔法的能力却并不是很强。输入:第一行两个数,分别是:N,宝石总数。P:你躲避反弹魔法的能力。(只要达到这个数你就会死)第二行N个数,每个宝石的防御等级
阅读全文
posted @ 2013-08-15 10:42
Primo...
阅读(173)
推荐(0)
摘要:
搞这个题差不多是从比赛开始到结束。从自信慢慢的看题一直到wrong到死。这个题目可以说成是思路题,以为我们只要明白一点,这道题就成了纯暴力的水题,那就是当操作数不足栈中数字数目的时候,我们就没有必要复制了。注意数组要开足,如果是一路复制的话,2^20就可以到10^6次方级了,在cur
#include #include #include #include #include #include #include #include #define M 1000005 using namespace std; int st[2*M]; int main ()
{ int...
阅读全文
posted @ 2013-08-14 21:34
Primo...
阅读(153)
推荐(0)
摘要:
搜索的好题,,,,摘自题解:题意; 给一个数n,求n 的最小的倍数,满足它的10进制 表示中每一位不是0就是1。思路: 用f(x)表示被n整除取模后的最小数,那么从0开始,每次往后添0或者1,如果得到的数与某个已经得到的数同余,就扔掉,不然就加入队列中继续搜。。。时间复杂度O(N).代码如下:#include #include #include #include #include using namespace std;
#define M 20005
struct Node{ int m; bool flag;
};
bool vis[M];
Node a[M];
...
阅读全文
posted @ 2013-08-07 17:07
Primo...
阅读(195)
推荐(0)
摘要:
定理详见维基百科。。。。http://zh.wikipedia.org/wiki/%E4%BA%94%E9%82%8A%E5%BD%A2%E6%95%B8%E5%AE%9A%E7%90%86代码如下:#include #include #include #define LL long long
#define INF 0x7fffffff
#define MOD 1000000007
#define M 100005 using namespace std; int p[M];
LL ans[M];
void presolve()
{ int c = 0; for(i...
阅读全文
posted @ 2013-08-06 21:33
Primo...
阅读(198)
推荐(0)
摘要:
摘自题解:若没有边权,则对点权从大到小排序即可。。考虑边,将边权拆成两半加到它所关联的两个点的点权中即可。。。因为当两个人分别选择不同的点时,这一权值将互相抵消。代码如下:#include #include #include #define LL long long
#define INF 0x7fffffff
#define M 100010 using namespace std;
int comp(const double a, const double b) { return a=2; i-=2) ans+=node[i]-node[i-1]; ...
阅读全文
posted @ 2013-08-06 19:51
Primo...
阅读(97)
推荐(0)
摘要:
摘自题解: 题意转化一下就是:给出一列数a[1]...a[n],求长度最长的一段连续的数,使得这些数的和能被M整除。分析:设这列数前i项和为s[i],则一段连续的数的和a[i]+a[i+1]+...+a[j-1]+a[j]=s[j]-s[i-1],所以这段连续的数的和能被m整除的条件就是(s[j]-s[i-1])%m==0,即s[j]%m-s[i-1]%m==0,因此,只需要每一个余数找使s[i]%m等于该余数的最小的i,和s[j]%m等于该余数的最大的j,相减即为最长的连续的数的长度。然后,可以预处理一下,用一数组存下模相同几个前缀和的最小坐标,使得代码优化为O(N)的时间复杂度。代码如下:
阅读全文
posted @ 2013-08-06 19:23
Primo...
阅读(163)
推荐(0)