题目链接:http://poj.org/problem?id=2081
分析:就是要求一系列数字,如果a[i-1]-i>0 则:ai=a[i-1]-i,否则的话 ai=a[i-1]+i,同时要满足这些数字在之前没有出现过。
源代码:
//POJ 2081 AC #include <iostream> using namespace std; int a[500010]; bool flag[3500000]={false};//如果也开个500010 运行时错误 void init(){ int i,t; a[0]=0; for(i=1;i<=500000;i++){ t=a[i-1]-i; if(t>0&&!flag[t]){ a[i]=t; } else{ a[i]=a[i-1]+i; } flag[a[i]]=true; } } int main(){ int k; init(); while(cin>>k){ if(k==-1) break; cout<<a[k]<<endl; } return 0; }
本文提供了一个解决POJ2081问题的有效算法,通过动态调整序列中的数值来确保每个数字都是唯一的,并给出了完整的C++实现代码。
472

被折叠的 条评论
为什么被折叠?



