废话就不多说了,开始。。。
第一题: 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)