金山西山居初赛第四场

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),如果给你这些题目正确的答案,你能猜出小明会做得到什么答案吗?
 

Input
输入第一行为一个正整数T(T<=10000),表示小明共做了T道题。
接下来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
 

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 -1
Hint
第二组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;
}


 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值