PAT1039A Course List for Student (25 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805447855292416
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
//三位大写字母和一位数字组成的名字
int changeID(string name){
int id=0;
for(int i=0;i<name.length()-1;i++){
id =id*26+(name[i]-'A');
}
id=id*10+(name[3]-'0');
return id;
}
int main(){
int m,n;
cin>>m>>n;
int maxn=26*26*26*10+10;
vector<int> coures[maxn];
for(int i=0;i<n;i++){
int k,cnt;
cin>>k>>cnt;
for(int j=0;j<cnt;j++){
string name;
cin>>name;
int id=changeID(name);
coures[id].push_back(k);
}
}
for(int i=0;i<m;i++){
string name;
cin>>name;
int id=changeID(name);
sort(coures[id].begin(),coures[id].end());
cout<<name<<" "<<coures[id].size();
for(int j=0;j<coures[id].size();j++){
cout<<" "<<coures[id][j];
}
cout<<endl;
}
return 0;
}
PAT1047A Student List for Course (25 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805433955368960
测试点3运行超时
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
//不向容器中添加字符串,添加学生编号,对应学生姓名数组
using namespace std;
const int stuMax=40010;
const int courseMax=2510;
char name[stuMax][5];
vector<int> course[courseMax];
bool cmp(int a,int b){
if(a!=b) return strcmp(name[a],name[b])<0;
}
int main(){
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++){
int m=0;
scanf("%s %d",&name[i],&m);
for(int j=0;j<m;j++){
int c=0;
cin>>c;
course[c].push_back(i);
}
}
//课程号从1开始到k
for(int i=1;i<=k;i++){
sort(course[i].begin(),course[i].end(),cmp);
cout<<i<<" "<<course[i].size()<<endl;
for(int j=0;j<course[i].size();j++){
cout<<name[course[i][j]]<<endl;
}
}
return 0;
}
PAT1063A Set Similarity (25 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805409175420928
答案错误待改,不知道哪儿有错
#include<iostream>
#include<cstdio>
#include<set>
#include<vector>
using namespace std;
set<int> num[51];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
int m;
cin>>m;
for(int j=0;j<m;j++){
int h;
cin>>h;
num[i].insert(h);
}
}
int k;
cin>>k;
for(int i=0;i<k;i++){
int a,b;
scanf("%d%d",&a,&b);
int cnt=0,count=num[a].size()+num[b].size();
for(set<int>::iterator it=num[b].begin();it!=num[b].end();it++){
if(num[a].find(*it)==num[a].end()){
count--;
cnt++;
}
}
double rs=cnt*100.0/count;
printf("%.1f",rs);
cout<<"%"<<endl;
}
return 0;
}
算法笔记方法
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;
set<int> st[51];
void compare(int x, int y) {
int num = st[y].size(), sameNum = 0;
for(set<int>::iterator it = st[x].begin(); it != st[x].end(); it++) {
if(st[y].find(*it) != st[y].end()) {
sameNum++;
} else {
num++;
}
}
printf("%.1f%%\n", sameNum * 100.0 / num);
}
int main() {
int n, k, q, v, st1, st2;
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", &k);
for(int j = 0; j < k; j++) {
scanf("%d", &v);
st[i].insert(v);
}
}
scanf("%d", &q);
for(int i = 0; i < q; i++) {
scanf("%d%d", &st1, &st2);
compare(st1, st2);
}
return 0;
}
PAT1060A Are They Equal (25 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805413520719872
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n;
string getRs(string str,int& num1){
int k=0,num=0;
string res;
while(str.length()>0&&str[0]=='0'){
str.erase(str.begin());
}
if(str[0]=='.'){
str.erase(str.begin());
while(str.length()>0&&str[0]=='0'){
str.erase(str.begin());
num1--;
}
}
else{
//未发现小数点,整数部分仍有有效数字
while(str.length()>k&&str[k]!='.'){
k++;
num1++;
}
//循环结束后,k小于长度,说明遇到小数点
if(k<str.length()){
str.erase(str.begin()+k);
}
}
//出掉0后,字符串清空,说明为0
if(str.length()==0){
num1=0;
}
k=0;
while(num<n){
//将str中有效部分加入
if(k<str.length()){
res+=str[k++];
}
//res长度不够要求进度,加入0
else{
res+='0';
}
num=num+1;
}
return res;
}
int main(){
string a,b,c,d;
int num3=0,num2=0;
cin>>n>>a>>b;
c=getRs(a,num3);
d=getRs(b,num2);
if(c==d&&num3==num2){
cout<<"YES 0."<<c<<"*10^"<<num3<<endl;
}
else{
cout<<"NO 0."<<c<<"*10^"<<num3<<" 0."<<d<<"*10^"<<num2<<endl;
}
return 0;
}
PAT1100AMars Numbers (20 分)/1044B
https://pintia.cn/problem-sets/994805342720868352/problems/994805367156883456
*scanf("%d%c",&n); 通过% * c防止读取一个空格
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
map<string,int> strTonum;
string numTostr[170];
string mars[13]={"tret","jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
string digitMars[13]={"tret","tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
int main(){
for(int i=1;i<13;i++)
{
for(int j=1;j<13;j++){
int num=i*13+j;
numTostr[num]=digitMars[i]+" "+mars[j];
string ma=digitMars[i]+" "+mars[j];
strTonum[ma]=num;
}
}
for(int i=0;i<13;i++){
//只有个位数
numTostr[i]=mars[i];
strTonum[mars[i]]=i;
//没有个位数,只有十位数
numTostr[i*13]=digitMars[i];
strTonum[digitMars[i]]=i*13;
}
int n;
scanf("%d%*c",&n);
for(int i=0;i<n;i++){
string a;
getline(cin,a);
if(a[0]>='0'&&a[0]<='9'){
int key=0;
for(int i=0;i<a.length();i++){
key=key*10+(a[i]-'0');
}
cout<<numTostr[key]<<endl;
}
else{
cout<<strTonum[a]<<endl;
}
}
return 0;
}在这里插入代码片
PAT1054A The Dominant Color (20 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805422639136768
#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
int main(){
int m,n;
scanf("%d %d",&m,&n);
map<int,int> colorCnt;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
int num;
scanf("%d",&num);
colorCnt[num]++;
}
}
int total=m*n;
int k=0,max=0;
for(map<int,int>::iterator it=colorCnt.begin();it!=colorCnt.end();it++){
if(it->second>max){
k=it->first;
max=it->second;
}
}
cout<<k<<endl;
return 0;
}
PAT1071A peech Patterns (25 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805398257647616
#include<iostream>
#include<cstdio>
#include<map>
#include<cstring>
using namespace std;
bool check(char c){
if(c>='0'&&c<='9') return true;
else if(c>='a'&&c<='z') return true;
else if(c>='A'&&c<='Z') return true;
else return false;
}
int main(){
map<string,int> cnt;
string a;
getline(cin,a);
int index=0;
while(index<a.length()){
string world="";
//读取一个词组
while(index<a.length()&&check(a[index])==true){
if(a[index]>='A'&&a[index]<='Z'){
a[index]=a[index]-'A'+'a';
}
world+=a[index];
index++;
}
if(world!=""){
cnt[world]++;
}
if(check(a[index])==false){
index++;
}
}
string rs;
int max=0;
for(map<string,int>::iterator it=cnt.begin();it!=cnt.end();it++){
if(it->second>max){
rs=it->first;
max=it->second;
}
}
cout<<rs<<" "<<max<<endl;
return 0;
}
PAT1022A Digital Library (30 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805480801550336
#include<iostream>
#include<cstdio>
#include<map>
#include<set>
#include<cstring>
using namespace std;
//通过set实现对id的有序排序
map<string,set<int>> title,author,key,publisher,published;
//输出符合条件的内容
void show(map<string,set<int>> &m,string &str){
if(m.find(str)==m.end()){
cout<<"Not Found"<<endl;
}
else{
//存在以str为下标的几何元素,直接输出存入的value值
for(set<int>::iterator it=m[str].begin();it!=m[str].end();it++){
printf("%07d\n",*it);
}
}
}
int main(){
int n;
scanf("%d%*c",&n);
for(int i=0;i<n;i++){
int id;
scanf("%d%*c",&id);
string value;
getline(cin,value);
title[value].insert(id);
getline(cin,value);
author[value].insert(id);
//关键字一行显示多个,以空格分隔
while(cin>>value){
key[value].insert(id);
char c=getchar();
if(c=='\n'){
break;
}
}
getline(cin,value);
publisher[value].insert(id);
getline(cin,value);
published[value].insert(id);
}
int m,k;
cin>>m;
for(int i=0;i<m;i++) {
string str;
scanf("%d: ",&k);
getline(cin,str);
cout<<k<<": "<<str<<endl;
if(k==1){
show(title,str);
}
else if(k==2){
show(author,str);
}
else if(k==3){
show(key,str);
}
else if(k==4){
show(publisher,str);
}
else{
show(published,str);
}
}
return 0;
}