分子函数2013金山西山居创意游戏程序挑战赛——初赛(4)

废话就不多说了,开始。。。

    第一题: HDU  4554    叛逆的小明

    标题意思很明白,直接可以求解二元一次方程

    a=(x+y)/2;

    b=x-a;

    然后用flag(+1、-1)记着每个的符号,使a、b都变为正数

    然后求反,乘以flag然后做运算就ok了。

    代码如下:

#include<iostream>
#include<vector>
#include<List>
#include<deque>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;

int i,j;
const int N=20010;
typedef long long LL;

int fan(int k)
{//求反
    int j,sum=0;
    while(k)
    {
        j=k%10;
        k/=10;
        sum=sum*10+j;
    }
    return sum;
}

int main()
{
    int s,t,T,x,y;
    cin>>T;
    while(T--)
    {
        scanf("%d%d",&s,&t);
        x=(s+t)/2;
        y=s-x;
        int f1=1,f2=1;
        if(x<0)
        {
            x=-x;f1=-1;
        }
        if(y<0)
        {
            y=-y;f2=-1;
        }
        x=fan(x);
        y=fan(y);
        printf("%d %d\n",f1*x+f2*y,f1*x-f2*y);
    }
    return 0;
}

    第二题:

    待续。。。。

    

    

    第三题:  HUD   4556   Stern-Brocot Tree

    两边是对称的,左边分母大于分子,右侧分子大于分母。

    且分子分母都是互质的,这让我们想到了 欧拉函数。

    每日一道理
“一年之计在于春”,十几岁的年纪,正是人生的春天,别辜负了岁月老人的厚爱与恩赐。行动起来,播种梦想吧!

    可以看出来,每个数都在上一级下面加了当前n的欧拉函数。。。

    代码如下:

#include<iostream>
#include<vector>
#include<List>
#include<deque>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;


const int N=1000000;
typedef __int64 LL;

LL phi[N+10];//这个地方需要用long long


void phi_table()
{
    memset(phi,0,sizeof(phi));
    LL i,j;
    phi[1]=1;
    for(i=2;i<=N;i++)
        if(!phi[i])
            for(j=i;j<=N;j+=i)
            {
                if(!phi[j])
                    phi[j]=j;
                phi[j]=phi[j]/i*(i-1);
            }
}


/*
void phi_table()
{
    LL i,j;
    for(i=1;i<=N;i++)
        phi[i]=i;
    for(i=2;i<=N;i++)
        if(phi[i]==i)
            for(j=i;j<=N;j+=i)
                phi[j]-=phi[j]/i;
}
*/

int main()
{
    phi_table();
    for(int i=2;i<=N;i++)
        phi[i]+=phi[i-1];
    int n;
    while(cin>>n)
        printf("%I64d\n",phi[n]*2+1);//对称的,所以phi[i]*2+1

    return 0;
}

    

文章结束给大家分享下程序员的一些笑话语录: 问答
Q:你是怎么区分一个内向的程序员和一个外向的程序员的? A:外向的程序员会看着你的鞋和你说话时。
Q:为什么程序员不能区分万圣节和圣诞节? A:这是因为 Oct 31 == Dec 25!(八进制的 31==十进制的 25)

posted @ 2013-05-21 21:38  xinyuyuanm  阅读(202)  评论(0编辑  收藏  举报