转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents
by---cxlove
果然是暴跌RATE啊。。。
B题当然时没搞出来,YY了通项。
决定用搜索来做,界定上下界优化,结果后期没有心思debug了。
题目是说:两个数,然后有两种操作,将两个数的和替换掉其中一个。依次下去,两种操作轮流,就是FIB数列的构造。给出操作次数N以及第 N项R,问能不能构造出这样的数列,而且要求错误次数最少。也就是相同操作相邻的数量。
对于这个序列,起点是知道的,但是每一步都有两种选择,所以不好确定。
但是反过来,如果给出最后两个数,序列是可以倒推出来的,而且是唯一的。
对于A,B(A>B)那么前一个必然是A-B,B,而且这一步的操作必然是将两者之和替换A-B。
所以做法便是枚举倒数第二项,然后倒推回来,是否刚好N项而且记录错误的次数即可。
有一个优化,便是如果GCD(I,R),即倒数两项并非互质的话,最终总是推出两个数相等,而且大于1,这时候的前一步便是0,d,而且d>0,这是显然不可能的。
而对于A,B这个状态,转移到B,A%B需要的步数也是确定的A/B,错误次数便是A/B-1
枚举结束之后,就是根据保存的最优状态,再倒推一遍,0,1后一步是确定的1,1对于这一步,不管是T还是B操作,结果一样,但是要求错误次数最小,肯定会选择和第一步相反的B操作。
#include<iostream>
#include<fstream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<vector>
#include<sstream>
#include<cassert>
#define LL long long
#define eps 1e-7
#define inf 1<<30
using namespace std;
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
void calc(int a,int b,int &mis,int &step){
if(b==1){mis+=a-1;step+=a;return;}
step+=a/b; //需要多少步
mis+=a/b-1; //错误次数为步数减1
calc(b,a%b,mis,step);
}
void get_ope(int a,int b,string &s){
//很显然,第一步是T,之后变成了1,1,这时候不管是T,还是B,效果是一样的
//需要错误次数最小的话,肯定就选B了
if(b==1){for(int i=1;i<a;i++) s+='B'; return;}
get_ope(b,a%b,s);
//大小改变之后,操作刚好相反
char ch=s[s.size()-1]=='T'?'B':'T';
for(int i=0;i<a/b;i++) s+=ch;
}
void slove(int n,int r){
int mistake=inf; //最优的错误次数
int num; //最优解时的倒数第二个数
for(int i=r-1;i>=1;i--){
if(gcd(i,r)==1){
int mis=0;
int step=0;
calc(r,i,mis,step);
if(step==n&&mis<mistake){num=i;mistake=mis;}
}
}
if(mistake!=inf){
cout<<mistake-1<<endl;
string s="T";
get_ope(r,num,s);
cout<<s<<endl;
}
else
cout<<"IMPOSSIBLE\n";
}
int main(){
int n,r;
while(cin>>n>>r)
if(n==1&&r==1) cout<<"0\nT\n"<<endl;
else slove(n,r);
return 0;
}
分享到:
相关推荐
BlackBoard自动登录基于nodejs的应用程序,该应用程序自动登录到您的帐户并参加网站上的。 我严格按照教育目的编写此脚本,对于用户(即昌迪加尔大学的所有学生)做出的任何非纪律行为,我概不负责(是的,全部,不...
Atom-atom-blackboard.zip,TextMate’s Blackboard theme, ported to Atom.原子黑板主题,atom是一个用web技术构建的开源文本编辑器。
Blackboard_v6.10.1_apkpure.com.xapk
blackboard2-master.zip.zip
采用WPF技术开发的绘图画板程序,主要采用InkCanvas画布,支持多种颜色的画笔
多种xcode主题打包下载 1. Blackboard 2. DartCity 3. EGO 4. EGOV2 5. Humane 6. Morrowind 7. ObsidianCode 8. Solarize Dark 9. Solarize Light 10. Spacedust 11. Twilight 12. Zenburn
Blackboard专为爱好爱好者而设计,应有助于在所谓的面包板上轻松构建原型。 当前,BlackBoard提供以下功能: 轻松创建所谓的面包板(也可以是条纹板或穿Kong板) 创建简单易读的原理图 NGSpice集成,因此可以...
blackboard操作指南
[Packt Publishing] Blackboard Learn 管理手册 (英文版) [Packt Publishing] Blackboard Learn Administration (E-Book) ☆ 出版信息:☆ [作者信息] Terry Patterson [出版机构] Packt Publishing [出版日期]...
东北大学计算机网络bb平台测试
基于Blackboard学习平台的混合学习模式的探索与实践.docx基于Blackboard学习平台的混合学习模式的探索与实践.docx
基于ssm+vue的中国版Blackboard学习系统.zip
1 • 1 Domain Model (领域模型)...................................................................................................6 1.2 Layers (分层).......................................................
让uOttawa Blackboard 更好看一点。 Blackboard 的清理网络视图,没有您从未使用过的所有额外内容。 要求 的完整版本,因为使用了 Userstyles 和 Userscripts。 设置 下载流体。 创建新应用程序,使用...
BB是我在学习javaweb过程中的一个小应用。是为了为之后学习SSH做的准备。整个过程体现的是MVC思想,运用Servlet技术实现。运行在tomcat上。应用是完成学生提问问题,老师在网上解决,并能评价等等。
基于Blackboard的Oracle数据库课程混合教学实践探索.pdf
C语言课程基于BlackBoard平台的翻转课堂教学模型设计.pdf
老师用的.我用过,还可以.
BLACKBOARD网络教学平台在民法课程教学中的应用研究.docx