水题
文章平均质量分 62
丶阿明
Hello World!
展开
-
CF Combination Lock
分析:只要求出两个数之间最短的距离相加就可以了。# include int main() { int i,n,x,y,sum=0; char a[1010],b[1010]; scanf("%d%s%s",&n,a,b); for(i=0;i<n;i++) { x=(10+a[i]-b[i])%10; y=(10+b[i]-a[i])%1原创 2015-05-24 19:17:48 · 594 阅读 · 0 评论 -
POJ 1579 Function Run Fun
分析:题意很简单,调用函数,根据a,b,c的值在递归调用函数。我们只要把w(a,b,c)从(1,1,1)计算到w(20,20,20)就行了,询问时直接就可以输出了。# include int dp[25][25][25]; int Dp(int a,int b,int c) { if(a<=0||b<=0||c<=0) return 1;原创 2015-10-24 00:46:15 · 474 阅读 · 0 评论 -
HDU 5505 GT and numbers
分析:给你2个数n,m,n每次都能乘以他的一个因子成为新的n,问你n至少乘多少次能够变成m,如果不能的话就输出-1。如果n能变成m话,m肯定是n的整数倍,初始的n乘以多个因子变成m,那么那些因子的乘积就是m/n,也就是n*(m/n)=m,所以每次都找到d=Gcd(n,m/n),然后n'=n*d,(m/n)'=(m/n)/d,直到n=m。如果d=1的话,n也不能变成m.这题的坑点就是1# inc原创 2015-10-18 10:43:37 · 833 阅读 · 0 评论 -
5504 GT and sequence
分析:题意就是给你n个数,让你至少选一个数,使得你选的这些数的乘积最大。如果只有1个数,就直接输出了,如果有正数或负数的个数大于2,答案肯定大于0,否则答案为0.# include # include using namespace std; int main() { int i,n,T,t,f; __int64 x,ans,a[100];原创 2015-10-18 10:27:44 · 632 阅读 · 0 评论 -
HDU 2084 数塔
分析:大水题,看代码。# include # include # define Max(x,y) (x>y?x:y) int main() { int i,j,n,t,max,a[105][105],dp[105][105]; scanf("%d",&t); while(t--) { scanf("%d",&n);原创 2015-08-18 10:31:35 · 607 阅读 · 0 评论 -
HDU 5280 Senior's Array
分析:给你n个数字,和一个p,让你改变n个数中的一个数为p,使得最长连续子序列之和最大。因为n不大,# include __int64 MAX(int n,int a[1005]) { __int64 i,sum=0,ans=-1e9; for(i=0;i<n;i++) { sum+=a[i]; if(sum>a原创 2015-08-18 10:27:39 · 606 阅读 · 0 评论 -
POJ 1106 Transmitters
分析:给你半圆的圆心,半径和一些点的坐标,问你这个半圆绕圆心旋转最多能覆盖多少点。能覆盖的点,点到圆心的距离肯定是小于等于半径的,将这些点找出来,然后分别以圆心和这些点的连线为半圆的一条边,判断有多少点是在这条边的同一侧。# include # include struct point { int x,y; }; point v[150],p; double原创 2015-08-13 19:44:40 · 442 阅读 · 0 评论 -
HDU 2036 改革春风吹满地
分析:逆时针给你一个n边形的n个坐标,让你求面积。从第一个顶点开始和其余各个顶点相连作向量这样得到n-2个三角形,三角形abc的面积是:向量ab X 向量ac (叉积),然后把这n-2个三角形的面积累加就行了,即使存在凹多边形也没关系,应该叉积是有方向的,凹的话,结果是负的,就是减去了那凹进去的面积。# include int main() { int n,i,x[10原创 2015-08-12 20:58:54 · 401 阅读 · 0 评论 -
POJ 2663 Tri Tiling
分析:当n为奇数时,肯定是不能铺满的,当n为偶数时,可以用递推得出,过程很有意思,可以自己想想。# include int main() { int i,n,a[35],s[35]; a[0]=1;s[0]=1; for(i=1;i<=15;i++) { a[i]=2*s[i-1]+a[i-1];原创 2015-07-14 20:34:35 · 679 阅读 · 0 评论 -
HDU 2082 找单词
分析:举个例子:比如第10个字母有5个,要你找前10个字母组合值为40的,只需找前9个字母值分别为40-0*10,40-1*10,40-2*10,40-3*10,40-4*10相加就可以了,所以前i个字母,值为j的组合数s[i][j]=s[i-1][j-k*i],k为第i个字母的个数 ,且值j-k*i>=0.# include # include int main() {原创 2015-07-12 14:18:30 · 1737 阅读 · 0 评论 -
CF Om Nom and Candies
分析:输入总重量c,红糖幸福值hr,蓝糖幸福值hb,红糖重wr,蓝糖重wb.输出最大的幸福值。直接暴力就可以了。为了防止时间超限,限制它的循环次数。# include int main() { __int64 c,hr,hb,wr,wb,r,b,i,j,max=0,time=10000000; scanf("%I64d%I64d%I64d%I64d%I64d",&c,&h原创 2015-05-17 21:12:28 · 586 阅读 · 0 评论 -
CF School Marks
分析:题意是:输入考试科目数 n ,已经考的科目数 k ,科目最高能考的分数 p ,总分不能超过的数 x ,中位数不能小于 y。再输入 k 个数代表已考的分数,让你任意输出剩的 n-k 门考试的分数,满足 n 门课的总分不超过 x ,中位数不低于 y .于是我们先计算已考的n门的分数加上剩下n-k门的最低分1的总和,如果超过x 就标记f=0。否则再找出大于等于y的那个最小的数放在中间,如果没有就加原创 2015-05-24 19:35:06 · 743 阅读 · 0 评论 -
CF King of Thieves
分析:题意是选一个点,然后跳4下都是跳到*上,存在就输出yes,否则输出no。因为n# include int main() { int i,j,n,f; char s[150]; scanf("%d",&n); scanf("%s",s); for(i=0,f=0;i<n;i++) for(j=1;j<n;j++) if(s[i]==原创 2015-05-17 20:00:43 · 592 阅读 · 0 评论 -
POJ 3984 迷宫问题
分析:简单的BFS# include struct node { int x,y,pre; }q[30]; int map[10][10]; void Print(int i) { if(q[i].pre!=-1) Print(q[i].pre); printf("(%d, %d)\n",q[i].x,q[i].y); }原创 2016-03-31 20:46:19 · 380 阅读 · 0 评论