1071-1080
1071 Speech Patterns(25)
#include<iostream>
#include<map>
#include<cctype>
using namespace std;
map<string, int> m;
int main(){
string s;
getline(cin, s);
string temp = "";
for(int i = 0; i < s.length(); i++){
// if((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= '0' && s[i] <= '9')){
// temp += tolower(s[i]);
// }else{
// if(temp != ""){
// m[temp]++;
// temp = "";
// }
// }
// if(i == s.length() - 1){
// if(temp != ""){
// m[temp]++;
// }
// }
if(isalnum(s[i])){
temp += tolower(s[i]);
}
if(!isalnum(s[i]) || i == s.length() - 1){
if(temp.length() != 0){
m[temp]++;
}
temp = "";
}
}
int maxn = -1;
string res;
for(auto it = m.begin(); it != m.end(); it++){
if(it -> second > maxn){
maxn = it -> second;
res = it -> first;
}
}
cout << res << " " << maxn;
}
1072 Gas Station(30)
//跑测试样例跑出来数3.2 但是能AC
#include<iostream>
#include<cstring>
using namespace std;
const int maxn = 1020;
const int INF = 1e9;
int adj[maxn][maxn], dis[maxn];
bool visit[maxn] = {false};
int n, m, k, ds;
int change(string p){
int res;
if(p[0] == 'G'){
res = stoi(p.substr(1)) + n;
}else{
res = stoi(p);
}
return res;
}
int main(){
fill(adj[0], adj[0] + maxn * maxn, INF);
fill(dis, dis + maxn, INF);
cin >> n >> m >> k >> ds;
string p1, p2;
int v1, v2;
int dist;
for(int i = 1; i <=k ; i++){
cin >> p1 >> p2 >> dist;
v1 = change(p1);
v2 = change(p2);
adj[v1][v2] = adj[v2][v1] = dist;
}
//最后结果
int ansid = -1;
double ansdis = -1, ansaver = INF;
//遍历所有gas station寻找最优结果
for(int index = n + 1; index <= n + m; index++){
double mindis = INF, aver = 0;//当前station的结果
fill(dis, dis + maxn, INF);
fill(visit, visit + maxn, false);
dis[index] = 0;
//更新全部节点的距离
for(int i = 0; i < n + m; i++){
int u = -1, minn = INF;
//寻找当前最近的节点
for(int j = 1; j <= n + m; j++){
if(!visit[j] && dis[j] < minn){
u = j;
minn = dis[j];
}
}
if(u == -1){
break;
}
visit[u] = true;
//更新距离
for(int v = 1; v <= n + m; v++){
if(!visit[v] && dis[v] > dis[u] + adj[u][v]){
dis[v] = dis[u] + adj[u][v];
}
}
}
//更新完后 计算最小值与平均值
for(int i = 1; i <= n; i++){
//如果存在节点仍然超出距离,那就说明该station不行
if(dis[i] > ds){
mindis = -1;
break;
}
if(dis[i] < mindis){
mindis = dis[i];
}
aver += 1.0 * dis[i];
}
if(mindis == -1){
continue;
}
aver /= n;
//更新最终结果
if(mindis > ansdis){
ansid = index;
ansdis = mindis;
ansaver = aver;
}else if(mindis == ansdis && aver < ansaver){
ansid = index;
ansaver = aver;
}
}
if(ansid == -1){
cout << "No Solution";
}else{
printf("G%d\n%.1f %.1f", ansid -n, ansdis, ansaver);
}
return 0;
}
1073 Scientific Notation(20)
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int main(){
string s;
cin >> s;
if(s[0] == '-'){
cout << '-';
}
int pos = 0;
while(s[pos] != 'E'){
pos++;
}
string num = s.substr(1, pos - 1);
int power = stoi(s.substr(pos + 1));
if(power < 0){
cout << "0.";
for(int i = 0; i < abs(power) - 1; i++){
cout << 0;
}
for(int i = 0; i < num.size(); i++){
if (num[i] != '.')cout << num[i];
}
}else{
cout << num[0];
int j, cnt;
for(j = 2, cnt = 0; j < num.length() && cnt < power; j++, cnt++){
cout << num[j];
}
if(j == num.length()){
for(int k = 0; k < power -cnt; k++){
cout << 0;
}
}else{
cout << ".";
for(int k = j; k< num.length(); k++){
cout << num[k];
}
}
}
return 0;
}
1074 Reversing Linked List(25)
#include<iostream>
#include<stack>
#include<vector>
using namespace std;
const int maxn = 1e5 + 1;
struct node{
int address, data, next;
}nums[maxn];
int main(){
int start, n, k;
cin >> start >> n >> k;
int ad, da, ne;
for(int i = 1; i <= n; i++){
cin >> ad >> da >> ne;
nums[ad].address = ad;
nums[ad].data = da;
nums[ad].next = ne;
}
int cnt = 0;
stack<node> s;
vector<node> res;
while(start != -1){
node num = nums[start];
s.push(num);
cnt++;
start = num.next;
if(cnt == k){
while(!s.empty()){
node temp = s.top();
res.push_back(temp);
s.pop();
}
cnt = 0;
}
}
if(!s.empty()){
stack<node> temp_s;
while(!s.empty()){
temp_s.push(s.top());
s.pop();
}
while(!temp_s.empty()){
res.push_back(temp_s.top());
temp_s.pop();
}
}
for(int i = 0; i < res.size(); i++){
if(i == 0){
printf("%05d %d ", res[i].address, res[i].data);
}else{
printf("%05d\n%05d %d ",res[i].address, res[i].address, res[i].data);
}
}
cout << -1;
}
1075 PAT Judge(25)
// //测试点4过不了
// //用户如果提交了拿了0分, 那也参与排名
// //只有全部题目都未提交或者提交的都未通过编译,才不能参与排名
// #include<iostream>
// #include<map>
// #include<algorithm>
// using namespace std;
// const int maxn = 1e4 + 1;
// struct student{
// int id, total_score;
// map<int,int> scores;
// int sort_flag;
// student(){
// id = 0;
// total_score = 0;
// sort_flag = 0;
// }
// }stu[maxn];
// int marks[10];
// int n, k, m;
// bool cmp(student s1, student s2){
// if(s1.sort_flag != s2.sort_flag){
// return s1.sort_flag > s2.sort_flag;
// }
// if(s1.total_score != s2.total_score){
// return s1.total_score > s2.total_score;
// }
// int prefect_s1 = 0, prefect_s2 = 0;
// for(int i = 1; i <= k; i++){
// if(s1.scores.count(i) && s1.scores[i] == marks[i]){
// prefect_s1++;
// }
// if(s2.scores.count(i) && s2.scores[i] == marks[i]){
// prefect_s2++;
// }
// }
// if(prefect_s1 != prefect_s2){
// return prefect_s1 > prefect_s2;
// }
// return s1.id < s2.id;
// }
// int main(){
// cin >> n >> k >> m;
// for(int i = 1; i <= k; i++){
// cin >> marks[i];
// }
// for(int i = 1; i <= n; i++){
// stu[i].id = i;
// }
// int uid, pid, pscore;
// for(int i = 1; i <= m; i++){
// cin >> uid >> pid >> pscore;
// if(stu[uid].scores.count(pid)){
// if(stu[uid].scores[pid] < pscore){
// stu[uid].scores[pid] = pscore;
// }
// }else{
// if(pscore == -1){
// stu[uid].scores[pid] = 0;
// }else{
// stu[uid].scores[pid] = pscore;
// // 测试点2 提交后为0分参与排序
// // if(pscore != 0){
// // stu[uid].sort_flag = 1;
// // }
// stu[uid].sort_flag = 1;
// }
// }
// }
// for(int i = 1; i <= n; i++){
// for(auto it = stu[i].scores.begin(); it != stu[i].scores.end(); it++){
// stu[i].total_score += it -> second;
// }
// }
// sort(stu + 1, stu + 1 + n, cmp);
// int rk = 0;
// int len = 1;
// int now_total_score = -1;
// for(int i = 1; i <= n; i++){
// if(stu[i].sort_flag == 0){
// break;
// }
// if(stu[i].total_score != now_total_score){
// now_total_score = stu[i].total_score;
// rk += len;
// len = 1;
// }else{
// len++;
// }
// printf("%d %05d %d", rk, stu[i].id, stu[i].total_score);
// for(int j = 1; j <= k; j++){
// cout << " ";
// if(stu[i].scores.count(j)){
// cout << stu[i].scores[j];
// }else{
// cout << "-";
// }
// }
// cout << endl;
// }
// return 0;
// }
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct node {
int rank, id, total = 0;
vector<int> score;
int passnum = 0;
bool isshown = false;
};
bool cmp1(node a, node b) {
if(a.total != b.total)
return a.total > b.total;
else if(a.passnum != b.passnum)
return a.passnum > b.passnum;
else
return a.id < b.id;
}
int main() {
int n, k, m, id, num, score;
scanf("%d %d %d", &n, &k, &m);
vector<node> v(n + 1);
for(int i = 1; i <= n; i++)
v[i].score.resize(k + 1, -1);
vector<int> full(k + 1);
for(int i = 1; i <= k; i++)
scanf("%d", &full[i]);
for(int i = 0; i < m; i++) {
scanf("%d %d %d", &id, &num, &score);
v[id].id = id;
v[id].score[num] = max(v[id].score[num], score);
if(score != -1)
v[id].isshown = true;
else if(v[id].score[num] == -1)
v[id].score[num] = -2;
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= k; j++) {
if(v[i].score[j] != -1 && v[i].score[j] != -2)
v[i].total += v[i].score[j];
if(v[i].score[j] == full[j])
v[i].passnum++;
}
}
sort(v.begin() + 1, v.end(), cmp1);
for(int i = 1; i <= n; i++) {
v[i].rank = i;
if(i != 1 && v[i].total == v[i - 1].total)
v[i].rank = v[i - 1].rank;
}
for(int i = 1; i <= n; i++) {
if(v[i].isshown == true) {
printf("%d %05d %d", v[i].rank, v[i].id, v[i].total);
for(int j = 1; j <= k; j++) {
if(v[i].score[j] != -1 && v[i].score[j] != -2)
printf(" %d", v[i].score[j]);
else if(v[i].score[j] == -1)
printf(" -");
else
printf(" 0");
}
printf("\n");
}
}
return 0;
}
1076 Forwards on Weibo(30)
#include<iostream>
#include<vector>
using namespace std;
const int maxn = 1e3 + 1;
struct user{
vector<int> followers;
int index;
user(){
index = 0;
}
}u[maxn];
bool visit[maxn] = {false};
int main(){
int n, l, k;
cin >> n >> l;
for(int i = 1; i <= n; i++){
u[i].index = i;
}
int len, temp;
for(int i = 1; i <= n; i++){
cin >> len;
for(int j = 1; j <= len; j++){
cin >> temp;
u[temp].followers.push_back(i);
}
}
//query
int query_u;
cin >> k;
for(int i = 1; i <= k; i++){
cin >> query_u;
fill(visit, visit + maxn, false);
visit[query_u] = true;//最后再减掉
vector<int> friends;
vector<int> newfriends;
newfriends.push_back(query_u);
for(int level = 1; level <= l; level++){
friends = newfriends;
for(int j = 0; j < friends.size(); j++){
query_u = friends[j];
for(int t = 0; t < u[query_u].followers.size(); t++){
if(visit[u[query_u].followers[t]] == false){
newfriends.push_back(u[query_u].followers[t]);
visit[u[query_u].followers[t]] = true;
}
}
}
}
int res = 0;
for(int i = 1; i <= n; i++){
if(visit[i] == true){
res++;
}
}
cout << res - 1 << endl;
}
}
1077 Kuchiguse(20)
#include<iostream>
#include<vector>
using namespace std;
vector<char> v;
const int maxn = 101;
string a[maxn];
int main(){
int n;
cin >> n;
//有个换行符
getchar();
for(int i = 0; i < n; i++){
//cin >> a[i];
getline(cin, a[i]);
}
int mu = - 1;
while(a[0].length() + mu >= 0){
int flag = true;
int index_a0 = a[0].length() + mu;
for(int i = 1; i < n; i++){
int index_ai = a[i].length() + mu;
if(index_ai < 0){
flag = false;
break;
}
if(a[0][index_a0] != a[i][index_ai]){
flag = false;
break;
}else{
continue;
}
}
if(flag == false){
break;
}else{
v.push_back(a[0][index_a0]);
mu--;
}
}
if(v.empty()){
cout << "nai";
}else{
for(int i = v.size() - 1; i >= 0; i--){
cout << v[i];
}
}
}
1078 Hashing(25)
#include<iostream>
#include<vector>
using namespace std;
const int maxn = 1e4 + 1;
bool visit[maxn];
vector<int> res;
bool isprime(int n){
if(n <= 1){
return false;
}
if(n == 2){
return true;
}
for(int i = 2; i * i <= n; i++){
if(n % i == 0){
return false;
}
}
return true;
}
int find(int tsize){
while(!isprime(tsize)){
tsize++;
}
return tsize;
}
int main(){
fill(visit, visit + maxn, false);
int tsize, n;
cin >> tsize >> n;
int temp, h;
tsize = find(tsize);
for(int i = 1; i <= n; i++){
cin >> temp;
h = temp % tsize;
int d = 1;
while(visit[h]){
if(d == tsize){
break;
}
h = (temp + d * d) % tsize;
d++;
}
if(d != tsize){
res.push_back(h);
visit[h] = true;
}else{
res.push_back(-1);
}
}
for(int i = 0; i < n; i++){
if(i != 0){
cout << " ";
}
if(res[i] == -1){
cout << "-";
}else{
cout << res[i];
}
}
}
1079 Total Sales of Supply Chain(25)
#include<iostream>
#include<queue>
#include<cmath>
#include<vector>
using namespace std;
const int maxn = 1e5 + 1;
struct node{
int index;
int type;
int level;
vector<int> next;
double sale;
node(){
index = 0;
type = 0;
sale = 0;
level = 0;
}
}su[maxn];
void getlevel(int x, int level){
su[x].level = level;
if(!su[x].next.empty()){
for(int i = 0; i < su[x].next.size(); i++){
getlevel(su[x].next[i], level + 1);
}
}
}
int main(){
int n;
double p, r;
cin >> n >> p >> r;
for(int i = 0; i < n; i++){
int len, temp;
su[i].index = i;
cin >> len;
if(len == 0){
cin >> temp;
su[i].type = 0;
su[i].sale = temp;
}else{
su[i].type = 1;
for(int j = 0; j < len; j++){
cin >> temp;
su[i].next.push_back(temp);
}
}
}
getlevel(0, 0);
queue<node> q;
q.push(su[0]);
double res = 0.0;
while(!q.empty()){
node temp = q.front();
if(temp.type != 0){
for(int i = 0; i < temp.next.size(); i++){
q.push(su[temp.next[i]]);
}
}else{
res += temp.sale * p * pow((r/100 + 1), temp.level);
}
q.pop();
}
printf("%.1f", res);
}
1080 Graduate Admission(30)
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn = 4e4 + 1;
struct student{
int index, ge, gi, grade, rank;
vector<int> prefer;
student(){
index =0;
ge = 0;
gi = 0;
grade = 0;
rank = 0;
}
}stu[maxn];
struct school{
int quota, index;
int last_rank;
vector<int> accept;
school(){
index = 0;
quota = 0;
last_rank = 0;
}
}sch[101];
int n, m, k;
bool cmp(student s1, student s2){
if(s1.grade != s2.grade){
return s1.grade > s2.grade;
}else{
return s1.ge > s2.ge;
}
}
void setrank(){
int rank = 0;
int len = 1;
int nowgrade = -1, nowge = -1;
for(int i = 0; i < n; i++){
if(nowgrade != stu[i].grade || nowge != stu[i].ge){
rank += len;
stu[i].rank = rank;
len = 1;
nowgrade = stu[i].grade;
nowge = stu[i].ge;
}else{
len++;
stu[i].rank = rank;
}
}
}
int main(){
cin >> n >> m >> k;
for(int i = 0; i < m; i++){
sch[i].index = i;
cin >> sch[i].quota;
}
for(int i = 0; i < n; i++){
int temp;
stu[i].index = i;
cin >> stu[i].ge >> stu[i].gi;
stu[i].grade = stu[i].ge + stu[i].gi;
for(int j = 0; j < k; j++){
cin >> temp;
stu[i].prefer.push_back(temp);
}
}
sort(stu, stu + n, cmp);
setrank();
for(int i = 0; i < n; i++){
for(int j = 0; j < stu[i].prefer.size(); j++){
int chosed_school = stu[i].prefer[j];
bool accept_flag = false;
if(sch[chosed_school].quota != 0){
sch[chosed_school].quota--;
sch[chosed_school].accept.push_back(stu[i].index);
sch[chosed_school].last_rank = stu[i].rank;
accept_flag = true;
}else{
if(stu[i].rank == sch[chosed_school].last_rank){
sch[chosed_school].accept.push_back(stu[i].index);
accept_flag = true;
}
}
if(accept_flag){
break;
}
}
}
for(int i = 0; i < m; i++){
if(!sch[i].accept.empty()){
sort(sch[i].accept.begin(), sch[i].accept.end());
for(int j = 0; j < sch[i].accept.size(); j++){
if(j != 0){
cout << " ";
}
cout << sch[i].accept[j];
}
}
cout << endl;
}
}