http://acm.hdu.edu.cn/showproblem.php?pid=4554
hdu4554 叛逆的小明
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 77 Accepted Submission(s): 57
Problem Description
叛逆期的小明什么都喜欢反着做,连看数字也是如此(负号除外),比如:
小明会把1234它看成4321;把-1234看成-4321;把230看成032 (032=32);把-230看成-032(-032=-32)。
现在,小明做了一些a+b和a-b的题目(a, b为整数且不含前导0),如果给你这些题目正确的答案,你能猜出小明会做得到什么答案吗?
小明会把1234它看成4321;把-1234看成-4321;把230看成032 (032=32);把-230看成-032(-032=-32)。
现在,小明做了一些a+b和a-b的题目(a, b为整数且不含前导0),如果给你这些题目正确的答案,你能猜出小明会做得到什么答案吗?
Input
输入第一行为一个正整数T(T<=10000),表示小明共做了T道题。
接下来T行,每行是两个整数x,y(-1000000<=x, y<=1000000), x表示a+b的正确答案,y表示a-b的正确答案。
输入保证合法,且不需考虑a或b是小数的情况。
接下来T行,每行是两个整数x,y(-1000000<=x, y<=1000000), x表示a+b的正确答案,y表示a-b的正确答案。
输入保证合法,且不需考虑a或b是小数的情况。
Output
输出共T行,每行输出两个整数s t,之间用一个空格分开,其中s表示小明将得到的a+b答案,t表示小明将得到的a-b答案。
Sample Input
3 20 6 7 7 -100 -140
Sample Output
38 24 7 7 -19 -23
#include<cstdio>
int C(int x){
int y=0,t,p;
if(x>0)p=1;
else p=-1,x=-x;
while(x){
t=x%10,x/=10;
y=y*10+t;
}
return p*y;
}
int main(){
int x,y,a,b,T;
scanf("%d",&T);
while(T--){
scanf("%d%d",&x,&y);
a=(x+y)/2,b=(x-y)/2;
printf("%d %d\n",C(a)+C(b),C(a)-C(b));
}
return 0;
}
http://acm.hdu.edu.cn/showproblem.php?pid=4555
hdu4554 平面上的整点
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 11 Accepted Submission(s): 1
Problem Description
众所周知,在三维空间内,不共线的三个点可以确定一个平面,现在给出三个点的空间坐标[x1,y1,z1],[x2,y2,z2],[x3,y3,z3],请计算在这3个点确定的平面上坐标分量x, y, z分别在[lx, rx],[ly, ry],[lz,rz]内的整数点有多少个。
Input
多组测试数据,每组数据包括两行。
第一行是9个整数x1, y1, z1, x2, y2, z2, x3, y3, z3表示三个点的坐标。
第二行有6个整数lx, rx, ly, ry, lz, rz 表示x, y, z的范围。
所有输入数据范围为[-10000, 10000],且
lx<=rx
ly<=ry
lz<=rz
第一行是9个整数x1, y1, z1, x2, y2, z2, x3, y3, z3表示三个点的坐标。
第二行有6个整数lx, rx, ly, ry, lz, rz 表示x, y, z的范围。
所有输入数据范围为[-10000, 10000],且
lx<=rx
ly<=ry
lz<=rz
Output
对每组测试数据输出一个整数,占一行,在指定定坐标范围内指定平面上有多少个整数点,若输入的三个点不能确定一个平面,直接输出"-1"。
Sample Input
0 0 0 0 1 0 0 0 1 -2 2 -2 2 -2 2 1 1 1 2 2 2 1 1 1 -1 1 -1 1 -1 1
Sample Output
25 -1Hint第二组Sample表示给定的3个点有重合点~
不会,待。。。
http://acm.hdu.edu.cn/showproblem.php?pid=4556
hdu4556 Stern-Brocot Tree
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 153 Accepted Submission(s): 90
Problem Description
上图是一棵Stern-Brocot树,其生成规则如下:
从第1行到第n行,每行相邻两数a/b和c/d,产生中间数(a+c)/(b+d),置于下一行中。将一行的分数(包括0/1,1/0),进行约分简化,则每一行(包括0/1,1/0,1/1),不会出现两个相同的分数。若分子或者分母大于n,则去掉该分数,将剩下的分数,从小到大排序,得到数列F。
现在请您编程计算第n行的数列F的个数。
Input
输入包含多组测试用例,每组输入数据是一个正整数n(n<=1000000)。
Output
对于每组的测试数据n,请输出第n行的数列F的个数。
Sample Input
1 2 4 6
Sample Output
3 5 13 25
分析:对于第n行,就是求分子、分母不超过n的真分数有多少个,对于一个分母x,分子小于x的真分数就是x的欧拉函数,故递推打表
#include<cstdio>
const int N=1000001;
int e[N];
bool f[N];
__int64 a[N],res=0;
void euler(){
int i,j;
for(i=1;i<N;i++)e[i]=i;
for(i=2;i<N;i++)if(e[i]==i){
for(j=i;j<N;j+=i)e[j]=e[j]/i*(i-1);
}
}
int main(){
int i;
euler();
for(i=1;i<N;i++)res+=e[i],a[i]=res*2+1;
while(~scanf("%d",&i))printf("%I64d\n",a[i]);
return 0;
}