PAT练习(八)

PAT 1030B/1085A

https://pintia.cn/problem-sets/994805260223102976/problems/994805291311284224
测试点4超时,5错误

#include
#include
#include
#include
using namespace std;
int main(){
	int n,p,max;
	cin>>n>>p;
	int arr[100010]={0};
	for(int i=0;i>arr[i];
	} 
	sort(arr,arr+n);
	max=arr[n-1];
	int maxN=0; 
	for(int i=0;i=max){
				num++;
			}
		}
		if(num>maxN) maxN=num;
	}
	cout<

PAT 1035B 插入与归并 (25 分)/1089A

https://pintia.cn/problem-sets/994805260223102976/problems/994805286714327040
测试点5,6错误

#include
#include
#include
using namespace std;
int ori[110],tempOri[110],arr[110],n;
void showA(){
	cout<0&&tempOri[j-1]>temp){
				tempOri[j]=tempOri[j-1];
				j--;
		}
		tempOri[j]=temp;
		if(flag==true){
			return true;
		}
	} 
	return false;
}
bool mergeA(){
	bool flag=false;
	for(int i=2;i/2<=n;i+=2){
		if(i!=2&&res()){
			flag=true;
		}
		for(int j=0;j>n;
	for(int i=0;i>ori[i];
		tempOri[i]=ori[i];
	}
	for(int i=0;i>arr[i];
	}
	if(insertA()){
		cout<<"Insertion Sort"<

PAT 1029A

https://pintia.cn/problem-sets/994805342720868352/problems/994805466364755968
测试点5,7,8运行超时,3答案错误

#include
#include
using namespace std;
int main(){
	int arr[200010]={0};
	int n,m;
	cin>>n;
	int cnt=0;
	for(int i=0;i>arr[i];
	}	
	cin>>m;
	int index=(n+m-1)/2;
//	for(int i=0;i>arr1[i];
//	}
//	int i=0,j=0;
//	while(cnt>temp;
		cnt=0;
		for(;itemp){
				flag=i;
				break;
			}
			cnt++;
		}
		for(int j=n;j>i;j--){
			arr[j]=arr[j-1];
		}
		arr[i]=temp;
		n++;
		j++;
		cnt++;
		
	}
	cout<

PAT 1048A Find Coins (25 分)

https://pintia.cn/problem-sets/994805342720868352/problems/994805432256675840
测试点3,4运行超时

#include
#include
#include
using namespace std;
int main(){
	int arr[100010]={0};
	int n,m;
	cin>>n>>m;
	bool flag=false;
	for(int i=0;i>arr[i];
	}
	sort(arr,arr+n);
	int left=0,right=0;
	for(int i=0;im){
				break;
			}
		}
		if(flag){
			break;
		}
	}
	if(flag==false){
		cout<<"No Solution";
	}
	
	return 0;
}

PAT 1040B 有几个PAT (25 分)/1093A

https://pintia.cn/problem-sets/994805260223102976/problems/994805282389999616

在这里插入代码片#include
#include
#include
using namespace std;
int main(){
	int leftP[100010]={0};
	string str;
	getline(cin,str);
	int right=0,rs=0;
	for(int i=0;i0){
			leftP[i]=leftP[i-1];
		}
		if(str[i]=='P'){
			leftP[i]+=1;
		}
	}
	//获取右边T的个数,与做左边当前位置已有的P的个数相乘。乘积相加为最终个数 
	for(int i=str.length()-1;i>=0;i--){
		if(str[i]=='T'){
			right+=1;
		}
		else if(str[i]=='A'){
			rs=(rs+leftP[i]*right)%1000000007;
		}
	} 
	cout<

PAT 1045B 快速排序 (25 分)/1101A

https://pintia.cn/problem-sets/994805260223102976/problems/994805278589960192
三个测试点运行超时

#include
#include
using namespace std;
int main(){
	int arr[100010]={0};
	int f[100010]={0};
	int n=0,count=0;
	
	cin>>n;
	for(int i=0;i>arr[i];
	}
	for(int i=0;iarr[i]){
				flag=false;
				break;
			}
		}
		if(flag){
			for(int j=n-1;j>i;j--){
				if(arr[j]0){
		cout<

暴力破解超时,修改

#include
#include
#include
using namespace std;
int main(){
	int arr[100010]={0},leftMax[100010]={0},rightMin[100010],rs[100010]={0};
	int n=0,count=0;	
	cin>>n;
	for(int i=0;i>arr[i];
	}
	//获取每个位置左边的最大数 
	for(int i=1;i=0;i--){
		rightMin[i]=min(rightMin[i+1],arr[i+1]);
	}
	//判断是否为主元 
	for(int i=0;iarr[i]){
			rs[count]=arr[i];
			count=count+1;
		}
	}
	if(count>0){
		cout<

你可能感兴趣的:(learning,diary,算法,C++)