上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 18 下一页
摘要: 题目想到了就是一个水题。提示一下,S(x,m)是一个很小的数。(不超过100)这样直接枚举这个数,然后求方程的整数解,并且判断是否满足条件即可。——————(一开始还用Pollard大整数分解+dfs的方法做,,深坑啊)#include #include #include #include #define ll long longusing namespace std;ll n,m,k,t,x,ans;ll count(int X){ ll tot=0; while (X) tot+=X%m,X/=m; return tot;}ll Min(ll A1,ll A2) { re... 阅读全文
posted @ 2013-11-20 17:06 092000 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 题目是说给你一个替换串和目标串。把一个长串中的所有的替换串替换为目标串而且不递归地替换。很简单,直接做一次KMP然后直接替换。注意替换后跳到替换串的尾部。注意大小写的问题。#include #include #include #define maxn 50550using namespace std;char s0[111],s1[111],s[maxn];int f[111],L;bool tag[maxn];int n,m;bool equal(char c1,char c2){ if (c1==c2) return true; if (c1>c2) swap(c1,c2); ... 阅读全文
posted @ 2013-11-20 17:03 092000 阅读(444) 评论(0) 推荐(0) 编辑
摘要: 水题。直接解二次方程判断点的高度即可。#include #include #include #include #define g 10using namespace std;double vx,vy,s,h,t1,t2,T;int n,t;int main(){ scanf("%d",&t); while (t--) { scanf("%lf%lf%lf%lf",&s,&h,&vx,&vy); if (vy*vy/(2*g)=t1 && T<=t2) puts("good done! 阅读全文
posted @ 2013-11-20 17:00 092000 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 题目是这样的,每个人手中有a和b的钱数,c为a和b中间最小的一个。每个回合,两个人胜利的概率都是0.5,胜利者从失败者手中获得c的钱数。如果有一个人手中没钱的话,那么他就failer,游戏结束。现在给你初始状态问你这次游戏需要进行的回合以及A胜利的期望值分别为多少?这样的,自己手动模拟几组数据就会发现胜利的概率就是a/(a+b)。对于回合数,我们可以深搜,但是有的可能有环,所以我们只要设置深搜上线只需要深度为20即可。因为超过20的肯定不会对小数前五位产生影响。#include #include #include using namespace std;int a,b,n,m,k=0;doub 阅读全文
posted @ 2013-11-19 22:00 092000 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 题目是很简单的队列维护的题目。每次加入之前判断该字母是否在队列以及队列的容量是否超过k即可。#include #include #include #define maxn 1666using namespace std;int q[maxn],inq[maxn];char s[maxn];int n,k,t,head,tail,ans,cas=0;int main(){ scanf("%d",&t); while (t--) { scanf("%d%d",&n,&k); scanf("%s",s); head= 阅读全文
posted @ 2013-11-19 21:53 092000 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 有趣的博弈题。关键在于把比边权的平分到两边的点权上面,然后点权排序,每次从大的开始拿就可以了。#include #include #include #include #define maxn 100100using namespace std;double a[maxn];int n,m,u,v;double w,s1,s0;int main(){ while (scanf("%d%d",&n,&m)!=EOF) { for (int i=1; i0; i--) { if (m&1) s0+=a[i]; ... 阅读全文
posted @ 2013-11-19 21:45 092000 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 题目是这样的,一个等边三角形,三边都是有镜子组成的。现在要你从一个点射入一条光线,问你如果要求光线在三角形里面反射n次然后从入点射出来的话,入射的方向可能有多少种?这。。。。。其实不难。关键是要搞清楚镜子反射的规律。这样来理解。反射的话相当于在另一面也是一个三角形,这样我们可以把同样的等腰三角形铺满整个二维空间。这样就会发现规律,如果我们把所有的点都分层,那么发现射到第一层的反射次数为1,第二层为3,第三才层为5,这样下来我们就可以知道如果要反射n次射出的那个对称点应该在那个层数了。到此我们唯一的问题就是求出每一层有多少个点了。但是有多少个点就是答案吗? 不是的,如果后面的点被前面的点遮挡了, 阅读全文
posted @ 2013-11-19 21:24 092000 阅读(492) 评论(0) 推荐(0) 编辑
摘要: 这个题目做得泪牛满面。题目为给你若干串,有的表示添加一个串,有的表示询问一个串有多少个字串为前面出现过的串。题目一看就知道肯定是AC自动机(不过后缀自动机也是可以的)但是细想就会发现AC自动机好像不支持在线修改。如果你每次读入一个串就重构一次AC自动机的话,那么时间复杂度达到了N^2,肯定会T的。于是就产生了一种奇葩的解法。搞两个自动机,一个自动机为大的自动机,一个自动机为小的自动机(用于缓冲)。每次我都只把字符串加入到小的自动机里面并且重构小自动机,当小自动机的容量超过了sqrt(L)的时候,我们把小自动机合并到大自动机上,这样算下来时间复杂度为O(L*sqrt(L)),每次询问的答案就是大 阅读全文
posted @ 2013-11-19 10:07 092000 阅读(776) 评论(0) 推荐(0) 编辑
摘要: 这个题目我只能说我一看就知道是这么做的,但是由于实现能力略水,Wa了3发。题意为给你两个区间[a,b]和[c,d],两个区间分别任取一个数,现在要你求出这个数模p的值为m的概率有多大。其实是这么做的,我们需要统计总共有多少种组合情况然后等于就知道分母和分子了。但是怎么求种类数呢 ???首先我们定义一个函数count(x,y),表示从0-x,0-y随机取两数满足情况的种类数。那么最后我们要求的答案ans=count(a,b)-count(a-1,b)-count(a,b-1)+count(a-1,b-1)。这是容斥原理,到这里问题就转化为了求函数值呢。但是我们的根本的问题还是没有解决。到底怎么. 阅读全文
posted @ 2013-11-16 17:40 092000 阅读(562) 评论(0) 推荐(0) 编辑
摘要: 水题。 但是我写挫了一个地方,Wa了三发。好吧,不能忍了。还有,本屌不知道如何用printf输出%,哪位学过C++的大仙知道这是什么情况? 告诉我一声啊。#include #include #define eps 1e-12using namespace std;double ans;int t,k,n,cas=0;char s[10];int main(){ scanf("%d",&t); while (t--) { scanf("%d%s",&n,s); if (s[1]=='B') k=1; else if (s[1 阅读全文
posted @ 2013-11-16 17:21 092000 阅读(248) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 18 下一页