PAT A1153

news/2024/12/22 9:08:40/

题目:https://pintia.cn/problem-sets/994805342720868352/problems/1071785190929788928

这道题我很久才AC,主要是不知道原来它的输入可以乱来。我原先是单独用scanf接收flag,然后再分三种情况接收后面的东西,即flag==1,接收%c;flag==2或flag==3都是用%d接收。结果一直有两个答案是错的。思考了很久觉得逻辑没有错,就只有考虑输入的东西奇形怪状,于是直接把输入整个接收,然后分情况,最后就AC了

#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 10010;
int n, m;
vector<int> A, B, T;
int nt[1010] = {0}, ns[1010] = {0};
int vis[1010];struct Node{string cardnum;int score, site;
}node[maxn];int change(string a, int Left, int Right){int num = 0;for(int i = Left; i <= Right; i++)num = num * 10 + a[i] - '0';return num;
}bool cmp1(int a, int b){if(node[a].score != node[b].score)return node[a].score > node[b].score;elsereturn node[a].cardnum < node[b].cardnum;
}bool cmp2(int a, int b){if(vis[node[a].site] != vis[node[b].site])return vis[node[a].site] > vis[node[b].site];elsereturn node[a].site < node[b].site;
}int main(){scanf("%d%d", &n, &m);getchar();for(int i = 0; i < n; i++){cin>>node[i].cardnum>>node[i].score;if(node[i].cardnum[0] == 'B')B.push_back(i);else if(node[i].cardnum[0] == 'A')A.push_back(i);elseT.push_back(i);int site = change(node[i].cardnum, 1, 3);node[i].site = site;++nt[site];ns[site] += node[i].score;}sort(A.begin(), A.end(), cmp1);sort(B.begin(), B.end(), cmp1);sort(T.begin(), T.end(), cmp1);for(int i = 1; i <= m; ++i){int flag;string str;cin>>flag>>str;cout<<"Case "<<i<<": "<<flag<<" "<<str<<endl;if(flag == 1){vector<int> ans;if(str == "B")ans = B;else if(str == "A")ans = A;else if(str == "T")ans = T;if(ans.empty()){printf("NA\n");continue;}for(int k = 0; k < ans.size(); k++)cout<<node[ans[k]].cardnum<<" "<<node[ans[k]].score<<endl;}else if(flag == 2){int site;sscanf(str.c_str(), "%d", &site);if(nt[site])printf("%d %d\n", nt[site], ns[site]);elseprintf("NA\n");}else{vector<int> ans;fill(vis, vis+1010, 0);for(int j = 0; j < n; j++){if(node[j].cardnum.substr(4, 6) == str){if(!vis[node[j].site]){ans.push_back(j);}vis[node[j].site]++;}}sort(ans.begin(), ans.end(), cmp2);if(ans.empty())printf("NA\n");for(int j = 0; j < ans.size(); j++){printf("%d %d\n", node[ans[j]].site, vis[node[ans[j]].site]);}}}return 0;
}

 


http://www.ppmy.cn/news/317448.html

相关文章

PAT a1125

目的&#xff1a;一堆绳段&#xff0c;组成最长绳子。 输入&#xff1a; N 绳段条数 N个整数 输出&#xff1a; 输出最长的长度&#xff0c;向下取整。 算法&#xff1a; 短的先加&#xff0c;折半的就少&#xff0c;把长的留在最后。因此用vector&#xff0c;并且排序…

A1095(30)

本题要注意查询有几辆车的时候如果采取遍历的方式容易产生超时的现象&#xff0c;所以我们要采取第二次排序&#xff0c;剩下的就是根据题意来做就可以了&#xff0c;注意字符串数组比较strcmp&#xff08;a&#xff0c;b&#xff09;0说明两者相同&#xff0c;采用map的话&…

增加Default-568h@2x.png支持iphone5

之前不知道&#xff0c;在iphone5上试程序&#xff0c;结果出现上下黑条。 搜索之 http://stackoverflow.com/questions/12479647/uiview-is-not-resizing-on-iphone-5-simulator http://stackoverflow.com/questions/12395200/how-to-develop-or-migrate-apps-for-iphone-5…

iOS15绕过激活工具TiggerRamDisk3.0,支持最新iOS15.5绕过

Tigger团队推出了最新的软件TiggerRamDisk3.0。这是一款绕过激活锁、屏幕锁界面的软件&#xff0c;也可以解决手机或者平板无法激活的问题。最重要的是它现在已经支持最新的iOS15系统&#xff0c;包括目前最新iOS 15.5 beta都是支持的。 目前支持的型号&#xff1a; iPhone6S…

XDRamD工具 windows 7-10-11系统苹果绕过激活锁ID界面 新工具,屏幕锁界面打电话,苹果X 16系统也支持,

支持14-15-16系统6S-X 平板mini4-iPad Pro2(12.9) 电脑支持windows10&#xff0c;windows11&#xff0c;支持windows7 激活锁页面是删基带绕过所以会耗电一点&#xff0c;解完不能插卡打电话。有些要安装描述文件才可以的软件不行&#xff0c; 因为15系统激活锁界面解ID必…

TiggerRamDisk绕过激活锁,屏幕锁隐藏工具新增 W in7 win 10版本,支持最新 iOS16.3系统

TiggerRamDisk这是一款可以绕过激活锁、屏幕锁界面完美隐藏的工具&#xff0c;也可以解决手机或者平板无法激活的问题&#xff0c;支持最新的IOS14.0-iOS16.3系统&#xff0c;支持Windows10以上和MacOS环境苹果系统使用。 目前支持的型号&#xff1a; 需要工程线 iPhone&#x…

TiggerRamDisk的超详细使用教程(亲测成功)

目录 一、软件介绍 (一)型号对应 (二)可以支持的功能: 二、操作步骤

OS福利部落iOS15绕过激活工具,支持最新iOS15.5绕过

这是一款绕过激活锁定界面的软件&#xff0c;也可以解决手机或者平板无法激活的问题。支持最新的iOS15系统&#xff0c;包括目前最新iOS 15.5都是支持的。 目前支持的型号&#xff1a; 需要工程线 iPhone&#xff1a;SE\6S\6SP iPad Air2 WiFi/4G (A1566 A1567) iPad Mini4…