大致题意:
如题目中给出的图片
对于这样的一个无线扩展出去的图,输入一个数n,求出数字上下左右的4个数字,按造升序输出。
大致思路:
突破点在,对于每一圈右下角的数字都是(a*2-1)*(a*2-1),a为当前在第a圈。如此,通过二分枚举判定出这个点在第几个圈内。然后在推导这个点和上下左右点的关系。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
long long getround(long long n){
long long left=0,mid,right=sqrt(2000000003),res;//1000000003
if(n==1)return 1;
while(right>=left){
mid=(right+left)/2;
long long tmp=mid;
tmp=tmp*2-1;
tmp*=tmp;
if(tmp<n){
res=mid;
left=mid+1;
}
else{
right=mid-1;
}
}
return res+1;
}
int main(){
long long i,j,k,loc,a,s,l,cas,b,c,d,n;
cin>>cas;
while(cas--){
cin>>n;
loc=getround(n);
if(n==1){
printf("2 4 6 8\n");
continue;
}
l=loc*2-1;
s=(loc-1)*2-1;
s*=s;
if(n==s+1){
cout<<s<<" "<<n+1<<" "<<(loc*2-1)*(loc*2-1)<<" "<<(loc*2-1)*(loc*2-1)+2<<endl;
continue;
}
if(n>s+1&&n<=s+l-2){
a=s-3*(l-3)+1;
a-=(s+l-1-n);
b=n-1;
c=n+1;
d=(l-1)*4+1+n;
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
continue;
}
if(n==s+l-1){
a=n-1;
b=n+1;
c=n+4*l-3;
d=c+2;
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
}
if(n>s+l-1&&n<s+2*(l-1)){
a=n+1-4*(l-2);
b=n-1;
c=n+1;
d=n+4*l-1;
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
continue;
}
if(n==s+2*(l-1)){
a=n-1;
b=n+1;
c=n+4*l-1;
d=n+4*l+1;
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
continue;
}
if(n>s+2*(l-1)&&n<s+3*(l-1)){
a=n-1-4*(l-2);
b=n-1;
c=n+1;
d=n+4*l+1;
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
continue;
}
if(n==s+3*(l-1)){
a=n-1;
b=n+1;
c=n+4*l+1;
d=n+4*l+3;
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
continue;
}
if(n>s+3*(l-1)&&n<s+4*(l-1)){
a=n-3-4*(l-2);
b=n-1;
c=n+1;
d=n+4*l+3;
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
continue;
}
if(n==s+4*(l-1)){
// cout<<"fuck";
a=n-3-4*(l-2);
b=n-1;
c=n+1;
d=n+4*l+3;
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
}
}
return 0;
}
- 大小: 50.8 KB
分享到:
相关推荐
zoj 2247 Magic Trick.md
ZOJ解题报告ZOJ解题报告ZOJ解题报告ZOJ解题报告
学习ACM程序设计的朋友一定要看,这是训练必备的POJ ZOJ题目分类及解题思路
浙大ZOJ题目分类,可以让你更方便快速锁定那你想要联系的题目,是自己快速提高·
zoj题目简单归类zoj题目简单归类zoj题目简单归类
acm中zoj1002的可运行C++程序
包含了zoj700多道题目的源代码,在做题时可以参考
深度搜索 回溯 int main { string s1 s2; while cin >> s1 >> s2 { count 0; cout << "[" << endl; if s1 length s2 length BackTrake s1 s2 ;... [更多]
Problem Arrangement zoj 3777
ZOJ题目答案源码
其中有pku、hdu、zoj等各大oj的题目分类,pku的oj比较详细一点,按不同算法进行分类,均系从网上自行搜集的。
浙大ACM网上的题目分类,以及部分题目的题解,包括题目,对于没联网的很适用,即使就有网的也很用的,里面有些题解很祥细……
一个非常非常非常非常实用的zoj结题代码
ZOJ1805代码
zoj 1003 c语言的,要写这么多描述吗。。
本代码是zoj上AC的1951的代码,把双重循环简化为O(n),不过素数判断的改进还不够
zoj1027解题指南和代码,还不错,是学校培训给的。
ZOJ题解集合-截至2835。共1244个文件,C/C++,有重复
zoj 题库 详细解答 解题代码 acm
zoj4041正确题解源代码,以及运行程序