40pts(RE)求助 弱化版90(WA)
查看原帖
40pts(RE)求助 弱化版90(WA)
930104
Naegi_Makoto楼主2023/7/10 15:30

这道题弱化版我是纯模拟做法

每次寻找最大的圆盘

code:(90pts)code: ( 90pts )

#include<bits/stdc++.h>
using namespace std;
//int plt[1305];
int A[1305],B[1005];
int pos[1305];
int ca,cb;
int cnt;
string ans[1300005];
string s[4] = {"A B","B A","A C","B C"};
int main(){

	int n;
	cin>>n;
//	ios::sync_with_stdio(0);
//	cin.tie(0);
//	cout.tie(0);
	for(int i=1;i<=n;i++){
		cin >> A[n-i+1];
		pos[i] = 1;
	}
	ca=n;

	for(int i=n;i>=1;i--){
		if( pos[i]==1 ){
			while( A[ca]!=i ){
//					cout << A[ca] << ": A ---> B" <<endl; 
				cnt++;
				pos[A[ca]]=2;
				ans[cnt]=s[0];
				B[++cb]=A[ca];	
				ca--;
			}
//				cout << A[ca] << ": A ---> C" <<endl; 
				cnt++;
				ans[cnt]=s[2];
				ca--;
			}
		else{
			while(B[cb]!=i ){
				cnt++;
				pos[B[cb]]=1;
				ans[cnt]=s[1];
				A[++ca]=B[cb];
				cb--;					
			}
				cnt++;
				ans[cnt]=s[3];
				cb--;
		}
//					cout << B[cb] << ": B ---> A" <<endl; 
				
	}
	cout << cnt << endl;
	for(int i=1; i<=cnt; i++)
		cout << ans[i] << endl;
	return 0;
}
//每次寻找最大的
//每次记录下两个的位置变化
//如果不是,在A的放到B,在B的放到A
//记录下当前AB两个柱子的状态是什么样的
//记录每个盘的位置变化
//查看当前查找的AB中的最大盘的位置
//模拟
// 
//看看AB两个柱子

交了一发发现 RE\rm RE ( 40pts40pts )
把数组开大之后先统计步数 再次模拟输出步骤

新做法(10pts) (1A  9RE\rm 1A ~~ 9RE)

#include<bits/stdc++.h>
using namespace std;
//int plt[1305];
int A[300005],B[300005];
int tmp[300005];
int pos[300005];
int ca,cb;
int cnt;
string s[4] = {"A B","B A","A C","B C"};
int main(){

	int n;
	cin>>n;
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	for(int i=1;i<=n;i++){
		cin >> A[n-i+1];
		tmp[n-i+1]=A[n-i+1];
		pos[i] = 1;
	}
	ca=n;

	for(int i=n;i>=1;i--){
		if( pos[i]==1 ){
			while( A[ca]!=i ){
//					cout << A[ca] << ": A ---> B" <<endl; 
				cnt++;
				pos[A[ca]]=2;
//				cout << s[0] << endl;
				B[++cb]=A[ca];	
				ca--;
			}
//				cout << A[ca] << ": A ---> C" <<endl; 
				cnt++;
//			cout << s[2] << endl;
				ca--;
			}
		else{
			while(B[cb]!=i ){
				cnt++;
				pos[B[cb]]=1;
//				cout << s[i] << endl;
				A[++ca]=B[cb];
				cb--;					
			}
				cnt++;
//				cout << s[3] << endl;
				cb--;
		}
//					cout << B[cb] << ": B ---> A" <<endl; 		
	}
	
	cout << cnt << endl;
	cb = 0; ca = n;
	for(int i=1;i<=n;i++)
		pos[i] = 1;
	for(int i=n;i>=1;i--){
		if( pos[i]==1 ){
			while( A[ca]!=i ){
//					cout << A[ca] << ": A ---> B" <<endl; 
				pos[A[ca]]=2;
				cout << s[0] << endl;
				B[++cb]=A[ca];	
				ca--;
			}
//				cout << A[ca] << ": A ---> C" <<endl; 
				cout << s[2] << endl;
				ca--;
			}
		else{
			while(B[cb]!=i ){
				pos[B[cb]]=1;
				cout << s[1] << endl;
				A[++ca]=B[cb];
				cb--;					
			}
				cout << s[3] << endl;
				cb--;
		}		
	}	
	
	return 0;
}

求de

2023/7/10 15:30
加载中...