题目链接: http://acdreamoj.sinaapp.com/problem.php?id=1135
题意:一个绳上有无数个节点,编号从1-无限,每个奇数点【假设编号是x】都跟3x+1号点连了一条线,每个偶数点y都跟y/2号点连了一条线。。现在给定一个N【小于1e9】。。要求出有多少个从<=N的点连到>N的点的线。。。【我怎么觉得解释之后就变成超水题了。。明明是群赛只有16人做出来的啊。。。】
TAG:数学
我觉得解释题意之后我都不要讲什么了。。找到第一个乘以3+1之后大于N的奇数t,答案就是(n+1)/2+(n-t)/2+1。。至于为什么。。自行琢磨吧。。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
int sum=0;
scanf("%d",&n);
sum+=(n+1)/2;
int tt=n;
while(tt%3!=0)
tt++;
tt/=3;
if(tt%2==0)
tt++;
sum+=(n-tt)/2+1;
printf("%d\n",sum);
}
return 0;
}
/**************************************************************
Problem: 1135
User: a135678942570
Language: C++
Result: 哇~AC了哈!orz
Time:0 ms
Memory:1280 kb
****************************************************************/