2021冬季PAT乙级题解

7-1 自动打包机 (15 分)

#include<bits/stdc++.h>
using namespace std;
queue<int> q;
int main(){
	int n,w,x,sum=0,cnt_box=0,cnt_g=0,cnt=0;
	cin>>n>>w;
	for(int i=0;i<n;i++){
		cin>>x;
		if(sum+x<w) {
			cnt++;
			sum+=x;
		}
		else if(sum+x==w){
			cnt_g+=cnt+1;
			cnt_box++;
			sum=0;
			cnt=0; 
		}
	}
	cout<<cnt_box<<" "<<cnt_g;
	return 0;
}

7-2 用药统计 (20 分)

#include<bits/stdc++.h>
using namespace std;
map<string,int> mp;
struct hh{
	int num,k;
	set<string> s;
};
int main(){
	int n,max_=-1;
	string yao,max_s;
	cin>>n;
	vector<hh> bingli(n);
	for(int i=0;i<n;i++){
		cin>>bingli[i].num>>bingli[i].k;
		for(int j=0;j<bingli[i].k;j++){
			cin>>yao;
			mp[yao]++;
			bingli[i].s.insert(yao);
		}
	}
	for(auto it=mp.begin();it!=mp.end();it++){
		if(it->second>max_) {
			max_=it->second;
			max_s=it->first;
		}
	}
	cout<<max_s<<" "<<max_<<endl; 
	for(int i=0;i<n;i++){
		if(bingli[i].s.find(max_s)!=bingli[i].s.end())
			printf("%04d\n",bingli[i].num);
	}
}

7-3 五彩斑斓的黑 (20 分)

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n,cnt=0;
	string s;
	set<string> sp,sh;
	cin>>n;
	string array[n];
	for(int i=0; i<n; i++) {
		cin>>s;
		sp.insert(s);
		array[i]=s;
	}
	cout<<sp.size()<<endl;
	for(int i=0; i<n; i++) {
		if(sh.find(array[i])==sh.end()){ //set中还没有加入这个
			if(cnt>0) cout<<" "; 
			cout<<array[i];
			sh.insert(array[i]);
			cnt++;
		}
		if(cnt==sp.size()) break;
	}
	return 0;
}

7-4 假新闻 (20 分)

做到这里脑子很困,测试点2运行超时,看了半个小时没查出原因…

#include<iostream>
#include<map>
using namespace std;
int web[10001]= {0};
map<int,int> ans;
int main() {
	int n,m,max_=0,max_net;;
	cin>>n>>m;
	for(int i=0; i<m; i++) { //6个事
		map<int,int> mp;
		for(int j=0; j<n; j++) { //n个网
			cin>>web[j];
			mp[web[j]]++;
		}
		int k=0,views[n];
		for(int j=0; j<n; j++) {
			views[j]=n-mp[web[j]];
			k=max(views[j],k);
		}
		for(int j=0; j<n; j++) {
			if(views[j]==k) ans[j]++;
		}
	}
	for(int i=0; i<n; i++) {
		if(ans[i]>max_) {
			max_net=i+1;
			max_=ans[i];
		}
	}
	cout<<max_net;
	return 0;
}

7-5 静态链表的秩 (25 分)

#include<bits/stdc++.h>
using namespace std;
map<int,int> mp;
int main(){
	int n,end_,next_i;
	cin>>n;
	int cnt=n;
	int ans[n];
	for(int i=0;i<n;i++){
		cin>>next_i;
		mp[next_i]=i;
	}
	int previous_index=mp[-1];
	while(cnt){
		ans[previous_index]=cnt;
		previous_index=mp[previous_index];
		cnt--;
	}
	for(int i=0;i<n;i++){
		if(i>0) cout<<" ";
		cout<<ans[i]; 
	}
	return 0;
}

比较简单的一次

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值