//C-C语言成绩; M-数学成绩; E-英语成绩; A-平均成绩//N-学生个数; M-想检查其等级的人数////对于M个学生,输出其最好的等级,以及其代表的最好等级的科目//如果多个科目等级一样,优先输出A,C,M,E等级//两个同学的最好科目等级一样,输出等级为最小的等级//如果某同学不存在,输出N/A#include<iostream>#include<string>#include<algorithm>#include<map>usingnamespace std;structstudent{
string ID;int Score[4];//int rank[4];//0-4分别代表C,M,E,A等级int best;char best_c;};
map<int,char> index_to_char;//0-4分别代表E,M,C,A
student a[2000];int N, M;boolcmp_E(student x, student y){return x.Score[0]> y.Score[0];}boolcmp_M(student x, student y){return x.Score[1]> y.Score[1];}boolcmp_C(student x, student y){return x.Score[2]> y.Score[2];}boolcmp_A(student x, student y){return x.Score[3]> y.Score[3];}voidinit_sort(){sort(a, a + N, cmp_E);
a[0].rank[0]=1;for(int i =1; i < N; i++){if(a[i].Score[0]== a[i -1].Score[0]) a[i].rank[0]= a[i -1].rank[0];else a[i].rank[0]= i +1;}sort(a, a + N, cmp_M);
a[0].rank[1]=1;for(int i =1; i < N; i++){if(a[i].Score[1]== a[i -1].Score[1]) a[i].rank[1]= a[i -1].rank[1];else a[i].rank[1]= i +1;}sort(a, a + N, cmp_C);
a[0].rank[2]=1;for(int i =1; i < N; i++){if(a[i].Score[2]== a[i -1].Score[2]) a[i].rank[2]= a[i -1].rank[2];else a[i].rank[2]= i +1;}sort(a, a + N, cmp_A);
a[0].rank[3]=1;for(int i =1; i < N; i++){if(a[i].Score[3]== a[i -1].Score[3]) a[i].rank[3]= a[i -1].rank[3];else a[i].rank[3]= i +1;}}intmain(){
index_to_char[0]='E'; index_to_char[1]='M'; index_to_char[2]='C'; index_to_char[3]='A';
cin >> N >> M;int j, k, l;for(int i =0; i < N; i++){
cin >> a[i].ID >> j >> k >> l;//EMCA
a[i].Score[2]= j; a[i].Score[1]= k; a[i].Score[0]= l; a[i].Score[3]=(j+k+l)/3;}init_sort();for(int i =0; i < N; i++){int min =99999;for(int j =0; j <4; j++){if(a[i].rank[j]<= min){//顺便按照A,C,M,E的优先级输出
min = a[i].rank[j]; a[i].best = a[i].rank[j];
a[i].best_c = index_to_char[j];}}}
map<string,int> ID_to_index;for(int i =0; i < N; i++){
ID_to_index[a[i].ID]= i;}for(int i =0; i < M; i++){
string s;
cin >> s;//iterator find(const KEY_TYPE & key);auto temp = ID_to_index.find(s);if(temp != ID_to_index.end()){int j = ID_to_index[s];
cout << a[j].best <<' '<< a[j].best_c << endl;}else{
cout <<"N/A"<< endl;}}}
1013
//N-城市数量,M-道路数量,K-要考虑的被破坏的城市的数量#include<iostream>#include<vector>usingnamespace std;
vector<int> road[1000];//从下标为1开始存储地图节点bool visited[1000];int N, M, K;voidDFS(int id,int q_city){//访问id城市
visited[id]=true;//id号城市已经被访问if(id == q_city)return;for(int i =0; i < road[id].size(); i++){int j = road[id][i];//j是id的临近城市if(!visited[j]&&j!=q_city)DFS(j, q_city);}}intmain(){
cin >> N >> M >> K;for(int i =0; i < M; i++){int p, q;
cin >> p >> q;
road[p].push_back(q); road[q].push_back(p);}while(K--){int q_city;
cin >> q_city;for(int i =1; i <= N; i++) visited[i]=false;int num =0;for(int i =1; i <= N; i++){if(!visited[i])//i城市还没有访问{DFS(i, q_city);//利用深度优先遍历统计连通子图的个数
num++;}}
cout << num-2<< endl;}return0;}
1014
//N-窗户数量(20);M-每个窗口队伍黄线前的容量(10);//K-客户数量(1000),客户从1到K进行了编号//Q-客户咨询的数量(1000)#include<iostream>#include<queue>#include<cstdio>#include<string>usingnamespace std;int N, M, K, Q;structguest{int process;int end =0;};
guest a[1001];//数组下标即是他的编号
queue<int> q[20];//有多少个窗口,就有多少个队伍intmain(){
cin >> N >> M >> K >> Q;for(int i =1; i <= K; i++){
cin >> a[i].process;}int max_guest_id =0;//代表当前黄线前面没有一个人for(int time =480; time <1020; time++){//1,处理出队的人for(int j =0; j < N; j++){if(q[j].size()&& a[q[j].front()].end == time)//该队伍的第一人满足条件就可以出队了{
q[j].pop();}}//2,处理入队的人for(int s =0; s < M; s++){for(int j =0; j < N; j++){if(K > max_guest_id)//说明黄线外面还有人{if(q[j].size()< M){
max_guest_id +=1;
q[j].push(max_guest_id);}}}}//3,接待接下来要接待的人for(int j =0; j < N; j++){if(q[j].size()&&a[q[j].front()].end ==0){//对头的客户没有正在接待中,从此刻开始接待
a[q[j].front()].end = time + a[q[j].front()].process;}}}for(int i =0; i < Q; i++){int ask;
cin >> ask;if(a[ask].end ==0)cout <<"Sorry"<< endl;else{printf("%02d:%02d\n", a[ask].end /60, a[ask].end %60);}}}
1015
#include<iostream>#include<string>usingnamespace std;boolIsprime(int n){if(n <2)return0;for(int i =2; i * i < n; i++){if(n % i ==0)return0;}return1;}intOther_to_Decimal(string s,int D){int sum =0;for(int i = s.size()-1, unit =1; i >=0; i--){
sum +=(s[i]-'0')* unit;
unit = unit * D;}return sum;}intmain(){while(1){int N, D;
cin >> N;if(N <0)break;
cin >> D;bool flag =Isprime(N);if(!flag) cout <<"No"<< endl;else{
string res ="";while(N !=0){
res +='0'+ N % D;
N = N / D;}int temp =Other_to_Decimal(res, D);if(Isprime(temp))
cout <<"Yes"<< endl;else
cout <<"No"<< endl;}}}
1016
//24小时的计费单价//N行记录(客户名字,时间及其日期,记录的状态)//按照时间顺序on-line与off-line的一对记录数据配对#include<iostream>#include<vector>#include<string>#include<algorithm>#include<cstdio>#include<map>usingnamespace std;structrecord{int month;int day;int h;int m;int data;//用一个int综合表示所有时间
string tag;};double pirce[24];double day_pirce =0;int N;
map<string, vector<record>> bill;boolcmp(record x, record y){return x.data < y.data;}intmain(){for(int i =0; i <24; i++){
cin >> pirce[i];
day_pirce += pirce[i];}
cin >> N;while(N--){
string s, statue;int a, b, p, q;char c;
cin >> s >> a >> c >> b >> c >> p >> c >> q >> statue;
record temp;
temp.month = a; temp.day = b; temp.h = p; temp.m = q;
temp.data = q + p *60+ b *1440;
temp.tag = statue;
bill[s].push_back(temp);}for(auto it = bill.begin(); it != bill.end(); it++){
vector<record> temp = it->second;int num = temp.size();sort(temp.begin(), temp.end(), cmp);double total =0;for(int i =0; i < num; i++){if(temp[i].tag =="on-line"){if(i+1<temp.size()&&temp[i +1].tag =="off-line"){if(!total){
cout << it->first <<' ';printf("%02d\n", temp[0].month);}int minute = temp[i +1].data - temp[i].data;double pp =0;for(int time = temp[i].data; time < temp[i +1].data; time++){
pp += pirce[(time%1440)/60];}printf("%02d:%02d:%02d %02d:%02d:%02d %d $%.2f\n", temp[i].day, temp[i].h, temp[i].m, temp[i +1].day, temp[i +1].h, temp[i +1].m, minute, pp/100);
total += pp;
i++;}}}if(total){printf("Total amount: $%.2f\n", total /100);}}}
1017
//N-客户总数;K-窗户个数;T-客户到达时间;P-服务客户时间#include<iostream>#include<algorithm>#include<cstdio>usingnamespace std;structpeople{int process;int come_time;//到达时间int end;int wait =-1;};
people guest[10000];int window_index[100];//K个窗户前都没有人boolcmp(people x, people y){return x.come_time < y.come_time;}intmain(){int N, K;
cin >> N >> K;for(int i =0; i < N; i++){char c;int hh, mm, ss;
cin >> hh >> c >> mm >> c >> ss >> guest[i].process;
guest[i].come_time = ss + mm *60+ hh *60*60;
guest[i].process =60* guest[i].process;}for(int i =0; i < K; i++){
window_index[i]=-1;//下标代表第几个窗口,值代表该窗口服务的客人id}sort(guest, guest + N, cmp);//将顾客按照时间先来后到的顺序排列int next =0;//接下来要服务客户的idint wait_total =0;for(int time =8*3600; guest[next].come_time <=17*3600; time++){//送客for(int i =0; i < K; i++){if(window_index[i]>=0)//窗户前有人{int index = window_index[i];if(guest[index].end == time)
window_index[i]=-1;}}//接客for(int i =0; i < K; i++){if(next < N && window_index[i]==-1&& guest[next].come_time <= time){
window_index[i]= next;
guest[next].wait = time - guest[next].come_time;
wait_total += guest[next].wait;
guest[next].end = time + guest[next].process;
next++;}}if(next >= N)break;//来的人都能处理完,就可以退出循环}double ave = wait_total /(next);printf("%.1f", ave /60);}
1018
#include<iostream>#include<vector>usingnamespace std;
vector<int> road[501];//对于i号车站,存储其所有临近车站的idint dist[501][501];//存储所有路的长度
vector<int> path;int min_dist[501];//存储从0到任意节点的最短路径的长度int S_num[501];//存储从1到N号车站的目前车数int C, N, Sp, M;//分别代表车站的容量,车站的总数,问题车站的编号,路数
vector<int> final_path;int final_send;int final_back;voidDFS(int id,int length,int send,int back){if(min_dist[id]< length)return;
path.push_back(id);if(id == Sp){//访问到了Spif(min_dist[Sp]> length||(min_dist[Sp]==length&&send<final_send)||(min_dist[Sp]== length && send == final_send&&back<final_back)){
min_dist[Sp]= length;
final_send = send;
final_back = back;
final_path = path;}}else{//还没有访问到Spif(min_dist[id]> length){
min_dist[id]= length;}for(int i =0; i < road[id].size(); i++){int next_id = road[id][i];int next_length = length + dist[id][next_id];int next_send, next_back;if(back + S_num[next_id]< C /2)//本车站的多余车给下一车站以后还是不够{
next_send = send +(C /2-(back + S_num[next_id]));
next_back =0;DFS(next_id, next_length, next_send, next_back);}else{//本车站的多余车给下一站以后够了
next_send = send;
next_back = back + S_num[next_id]- C /2;DFS(next_id, next_length, next_send, next_back);}}}
path.pop_back();}intmain(){
cin >> C >> N >> Sp >> M;for(int i =1; i <= N; i++){//输入1号车站到N号车站的目前车数
cin >> S_num[i];}for(int i =0; i < M; i++){int a, b, c;
cin >> a >> b >> c;
road[a].push_back(b);
road[b].push_back(a);
dist[a][b]= c;
dist[b][a]= c;}for(int i =0; i <501; i++)min_dist[i]=99999999;DFS(0,0,0,0);
cout << final_send <<' ';
cout << final_path[0];for(int i =1; i < final_path.size(); i++){
cout <<"->"<<final_path[i];}
cout<<' '<< final_back;}
1019
#include<iostream>#include<vector>#include<string>#include<map>usingnamespace std;int N, b;
vector<int> ans;boolIs_Palindromic()//判断a数组是不是一个回文子串{bool flag =true;for(int i =0; i < ans.size()/2; i++){int j = ans.size()-(i +1);if(ans[i]!= ans[j]) flag =false;}return flag;}voidN_to_ans(int b){while(N !=0){int x = N % b;
ans.push_back(x);
N = N / b;}//注意,得到的vector-ans是倒序存储b进制的数字N的//但是我们要判断他是不是回文,所以其倒序也能判断}intmain(){
cin >> N >> b;N_to_ans(b);int flag =Is_Palindromic();
map<int, string> p;
p[0]="No";
p[1]="Yes";
cout << p[flag]<< endl;for(int i = ans.size()-1; i >=0; i--){if(i != ans.size()-1)cout <<' ';
cout << ans[i];}}
1020
#include<iostream>#include<queue>usingnamespace std;structnode{int id;
node* left =nullptr;
node* right =nullptr;};int a[31];int b[31];int N;
node*build_tree(int h1,int t1,int h2,int t2){if(h1 > t1)returnNULL;
node* p =new node;
p->id = a[t1];int index;for(index = h2; b[index]!= a[t1]; index++);
p->left =build_tree(h1, index -1- h2 + h1, h2, index -1);
p->right =build_tree(index - h2 + h1, t1 -1, index +1, t2);return p;}intmain(){
cin >> N;for(int i =0; i < N; i++){
cin >> a[i];}for(int i =0; i < N; i++){
cin >> b[i];}
node*root =build_tree(0, N-1,0, N-1);
queue<node*> tree;
tree.push(root);int i =0;while(!tree.empty()){if(i !=0)cout <<' ';
node* temp = tree.front();
tree.pop();
cout <<temp ->id;if(temp->left !=nullptr)tree.push(temp->left);if(temp->right !=nullptr)tree.push(temp->right);
i++;}}