pat1071-1080

来源:互联网 发布:做淘宝店铺装修多少钱 编辑:程序博客网 时间:2024/06/17 16:37

1071

#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<algorithm>#include<ctime>#include<cstdlib>#include<map>#include<set>using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e3+5;typedef long long ll;#define MP(x, y) make_pair(x, y);char a[1048580];map<string, int> mp;map<string, int> ::iterator it;int main() {  gets(a);  int len = strlen(a);  string tt;  for(int i = 0; i <= len; ++i) {    if( (a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z') || (a[i] >= '0' && a[i] <= '9') ) {      if(a[i] >= 'A' && a[i] <= 'Z') a[i] = a[i]-'A'+'a';      tt += a[i];    }    else {      if(tt.size() > 0) mp[tt] ++;      tt.clear();    }  }  string a1; int a2 = -1;  for(it = mp.begin(); it != mp.end(); ++it) {    if(a2 < it->second) {      a1 = it->first;      a2 = it->second;    }  }  printf("%s %d\n", a1.c_str(), a2);  return 0;}

1072 一道非常麻烦的最短路问题

#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<algorithm>#include<ctime>#include<cstdlib>#include<map>#include<set>using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e3+50;typedef long long ll;#define MP(x, y) make_pair(x, y);int n,m,k,d;map<string, int> mp;double ans1, ans2; string ans3;char nam[N][10];int tol;struct Node{  int to, nx, di;}E[N*N*2];int head[N], tot;void add(int fr, int to, int di) {  E[tot].to = to; E[tot].di = di; E[tot].nx = head[fr]; head[fr] = tot ++;}struct Hode{  int po, di;  Hode(int a=0, int b=0):po(a), di(b) {}  bool operator< (const Hode & T) const {    return di > T.di;  }};int dis[N];int vis[N];string change(int x, int ty) {  vector<int> vc;  while(x) {    vc.push_back(x % 10);    x /= 10;  }  string tmp;  if(ty) tmp += 'G';  for(int i = vc.size()-1; i >= 0; --i) {    tmp += vc[i]+'0';  }  return tmp;}void dij(int x) {  memset(vis, 0, sizeof(vis));  memset(dis, INF, sizeof(dis));  dis[x] = 0;  priority_queue<Hode> Q;  Q.push(Hode(x, dis[x]));  while(!Q.empty()) {    int po = Q.top().po; Q.pop();    if(vis[po]) continue;    vis[po] = 1;    for(int i = head[po]; ~i; i = E[i].nx) {      int to = E[i].to;      if(dis[to] > dis[po] + E[i].di) {        dis[to] = dis[po] + E[i].di;        Q.push(Hode(to, dis[to]));      }    }  }  int fl = 1; int tmp = INF; int all = 0;  for(int i = 1; i <= n; ++i) {    string tt = change(i, 0);    int id = mp[tt];    if( dis[id] > d) {      fl = 0; break;    }    if(dis[id] < tmp) {      tmp = dis[id];    }    all += dis[id];//    printf("%d ", dis[id]);  }//  printf("%d %.2f %s\n", fl, all*1.0/n, nam[x]);  if(fl && tmp*1.0 > ans1) {    ans3 = nam[x];    ans1 = tmp*1.0;     ans2 = all*1.0 / n;  }else if(fl && tmp*1.0 == ans1 && all*1.0/n < ans2) {    ans2 = all*1.0 / n;    ans3 = nam[x];  }}  int main() {  while(~scanf("%d %d %d %d",&n, &m, &k, &d)) {    ans1 = -1.0;    mp.clear(); tot = 0;    memset(head, -1, sizeof(head));    tol = 0;    for(int i = 0; i < k; ++i) {      char s1[10]; char s2[10]; int a;      scanf("%s %s %d", s1, s2, &a);      if(mp.find(s1) == mp.end()) {        ++tol;        for(int j = 0; j <= strlen(s1); ++j) nam[tol][j] = s1[j];        mp[s1] = tol;      }      if(mp.find(s2) == mp.end()) {        ++tol;        for(int j = 0; j <= strlen(s2); ++j) nam[tol][j] = s2[j];        mp[s2] = tol;      }      int t1 = mp[s1]; int t2 = mp[s2];    //  if(s1[0] == 'G' && s2[0] == 'G') continue;      add(t1, t2, a); add(t2, t1, a);    }      for(int i = 1; i <= m; ++i) {      string tt = change(i, 1);    //  printf("%s %d\n", tt.c_str(), mp[tt]);      int id = mp[tt];      dij(id);    }    if(ans1 == -1) printf("No Solution\n");    else {      printf("%s\n%.1f %.1f\n", ans3.c_str(), round(ans1*10) /10, round(ans2*10)/10 );    }  }  return 0;}

1073

#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<algorithm>#include<ctime>#include<cstdlib>#include<map>#include<set>using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e3+50;typedef long long ll;#define MP(x, y) make_pair(x, y);char s[10000];char t[10000];int main() {  while(~scanf("%s", s)) {    int len = strlen(s);    int cnt = 0;    if(s[0] == '-') printf("-");    int edpoi = -1;    int tag = 0;    for(int i = 1; i < len; ++i) {      if(s[i] == '.') edpoi = cnt-1;      else if(s[i] == 'E') {        tag = i; break;      }else t[cnt++] = s[i];    }    if(edpoi == -1) edpoi = cnt-1;    int tmp = 0;    for(int i = tag+2; i < len; ++i) {      tmp = tmp*10 + s[i]-'0';    }    if(s[tag+1] == '-') tmp *= -1;  //  printf("%d %d\n", edpoi, tmp);      int nwpoi = edpoi + tmp;    if(nwpoi < 0) {      printf("0.");      for(int i = 0; i < abs(nwpoi+1); ++i) printf("0");    }    for(int i = 0; i < cnt; ++i) {      printf("%c", t[i]);       if(i == nwpoi && i != cnt-1) printf(".");    }      if(nwpoi > cnt-1) {      for(int i = 0; i < nwpoi-cnt+1; ++i) printf("0");    }    printf("\n");  }    return 0;}

1074

#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<algorithm>#include<ctime>#include<cstdlib>#include<map>#include<set>using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e6+5;typedef long long ll;#define MP(x, y) make_pair(x, y);int key[N]; int nx[N];vector<int> tmp;vector<int> ans;int head, n, k;void dfs(int x) {  if(x == -1) return;  tmp.push_back(x);  if(tmp.size() == k) {    for(int i = k-1; i >= 0; --i) {      ans.push_back(tmp[i]);    }    tmp.clear();  }  dfs(nx[x]);}int main() {  while(~scanf("%d %d %d", &head, &n, &k)) {    for(int i = 0; i < n; ++i) {      int a, b, c; scanf("%d %d %d", &a, &b, &c);      key[a] = b; nx[a] = c;    }    dfs(head);    for(int i = 0; i < tmp.size(); ++i) ans.push_back(tmp[i]);    for(int i = 0; i < ans.size(); ++i) {      printf("%05d %d ", ans[i], key[ans[i]]);      if(i == ans.size()-1) printf("-1\n");      else printf("%05d\n", ans[i+1]);    }  }    return 0;}

1075

#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<algorithm>#include<ctime>#include<cstdlib>#include<map>#include<set>using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e4+5;typedef long long ll;#define MP(x, y) make_pair(x, y);int n,m,k;int mark[6];map<int, int> mp;struct Node{  int num;   int grade[6];}E[N];int tot;int cmp(Node a, Node b) {  int a1 = 0; int b1 = 0;   int a2 = 0; int b2 = 0;  for(int j = 1; j <= k; ++j) {    a1 += a.grade[j], b1 += b.grade[j];    if(a.grade[j] == -1) a1 ++; else if(a.grade[j] == -2) a1 += 2;    if(b.grade[j] == -1) b1 ++; else if(b.grade[j] == -2) b1 += 2;    if(a.grade[j] == mark[j]) a2 ++;    if(b.grade[j] == mark[j]) b2 ++;  }  if(a1 != b1) return a1 > b1;  else if(a2 != b2) return a2 > b2;  else return a.num < b.num;}int main() {  while(~scanf("%d %d %d", &n, &k, &m)) {    tot = 0;    mp.clear();    for(int i = 1; i <= k; ++i) scanf("%d", &mark[i]);    for(int i = 0; i < m; ++i) {      int a, b, c; scanf("%d %d %d", &a, &b, &c);      if(mp.find(a) == mp.end()) {        mp[a] = ++tot;        for(int j = 1; j <= k; ++j) E[tot].grade[j] = -2;      }      int id = mp[a];      E[id].num = a;      E[id].grade[b] = max(E[id].grade[b], c);    }    sort(E+1, E+tot+1, cmp);    int pre = -1, prerank;    int cnt = 0;    for(int i = 1; i <= tot; ++i) {      int no = 0; int all = 0; int nwrank;      for(int j = 1; j <= k; ++j) {        if(E[i].grade[j] <= -1) no ++;        all += E[i].grade[j];        if(E[i].grade[j] == -1) all ++;         else if(E[i].grade[j] == -2) all += 2;      }      if(no == k) { cnt ++; continue; }      if(pre == all) nwrank = prerank;      else nwrank = i-cnt;      printf("%d %05d %d", nwrank, E[i].num, all);      for(int j = 1; j <= k; ++j) {        if(E[i].grade[j] == -2) printf(" -");        else if(E[i].grade[j] == -1) printf(" 0");        else printf(" %d", E[i].grade[j]);      }      printf("\n");      pre = all; prerank = nwrank;    }  }  return 0;}

1076

#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<algorithm>#include<ctime>#include<cstdlib>#include<map>#include<set>using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e3+5;typedef long long ll;#define MP(x, y) make_pair(x, y)int  n,l;struct Node{  int to, nx;}E[N*N*2];int head[N], tot;void add(int fr, int to) {  E[tot].to = to; E[tot].nx = head[fr]; head[fr] = tot++;}int vis[N];void bfs(int x) {  for(int i = 1; i <= n; ++i) vis[i] = 0;  vis[x] = 1;  queue<pair<int, int> > Q;  Q.push(MP(x, 0));  int ans = 0;  while(!Q.empty()) {    int po = Q.front().first; int dep = Q.front().second; Q.pop();    if(dep > l) break;    ans ++;    for(int i = head[po]; ~i; i = E[i].nx) {      int to = E[i].to;      if(!vis[to]) {        vis[to] = 1;        Q.push(MP(to, dep+1));      }    }  }  printf("%d\n",ans-1);}int main() {  while(~scanf("%d %d", &n, &l)) {    memset(head, -1, sizeof(head));    tot = 0;    for(int i = 1; i <= n; ++i) {      int a; scanf("%d", &a);      for(int j = 0; j < a; ++j) {        int b; scanf("%d", &b);        add(b, i);      }    }    int k; scanf("%d", &k);    for(int i = 1; i <= k; ++i) {      int a; scanf("%d", &a);      bfs(a);    }  }  return 0;}

1077

#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<algorithm>#include<ctime>#include<cstdlib>#include<map>#include<set>using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e3+5;typedef long long ll;#define MP(x, y) make_pair(x, y)char s[105][300];int main() {  int n;  while(~scanf("%d", &n)) {    getchar();    for(int i = 0; i < n; ++i) {      gets(s[i]);    //  printf("tt %s\n", s[i]);        for(int j = 0; j < strlen(s[i])/2; ++j) {        swap(s[i][j], s[i][strlen(s[i])-j-1]);      }  //    printf("%s\n", s[i]);    }    vector<char> ans;    int fl = 0;    while(1) {      int nw = 1;      for(int i = 1; i < n; ++i) {        if(s[i][fl] != s[i-1][fl] || s[i][fl] == 0) {          nw = 0; break;        }      }      if(!nw) break;      else ans.push_back(s[0][fl]);      fl ++;    }    if(ans.size() == 0) printf("nai\n");    else {      for(int i = ans.size()-1; i >= 0; --i) printf("%c", ans[i]); printf("\n");    }  }  return 0;}

1078 这道题提醒了我得把 数据结构学好,等题目刷完我要开始看数据结构啦

#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<algorithm>#include<ctime>#include<cstdlib>#include<map>#include<set>using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e4+5;typedef long long ll;#define MP(x, y) make_pair(x, y)int has[N];int prime(int x) {  if(x == 1) return 0;  if(x == 2) return 1;  for(int i = 2; i <= sqrt(x); ++i) {    if(x % i == 0) return 0;  }  return 1;}int main() {  int msize, n;  while(~scanf("%d %d", &msize, &n)) {    memset(has, 0, sizeof(has));    while(1) {      if(prime(msize)) break;      msize ++;    }    for(int i = 0; i < n; ++i) {      int a; scanf("%d", &a);      if(i) printf(" ");      if(!has[a%msize]) {        has[a%msize] = a;        printf("%d", a%msize);      }else{        int fl = 0;        for(int j = 1; j < msize; ++j) {          int tmp = (a + j*j) % msize;        //  if(tmp >= msize) break;          if(!has[tmp]) {            has[tmp] = a;             fl = 1;            printf("%d", tmp);            break;          }        }        if(!fl)   printf("-");      }    }    printf("\n");  }  return 0;}

1079

#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<algorithm>#include<ctime>#include<cstdlib>#include<map>#include<set>using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e5+5;typedef long long ll;#define MP(x, y) make_pair(x, y)int n; double p, r;struct Node{  int to, nx;}E[N*1000];int head[N]; int tot;void add(int fr, int to) {  E[tot].to = to; E[tot].nx = head[fr]; head[fr] = tot++;}int product[N]; int has[N];double ans;void dfs(int x, double price) {  if(has[x]) {    ans += product[x] * price;    return;  }   for(int i = head[x]; ~i; i = E[i].nx) {    int to = E[i].to;    dfs(to, price*(1+ r/100));  }}int main() {  while(~scanf("%d %lf %lf", &n, &p, &r)) {    memset(head, -1, sizeof(head));    memset(has, 0, sizeof(has));    tot = 0; ans = 0;    for(int i = 0; i < n; ++i) {      int a; scanf("%d", &a);      for(int j = 0; j < a; ++j) {        int b; scanf("%d", &b);        add(i, b);      }      if(!a) {        scanf("%d", &a);        product[i] = a;  has[i] = 1;      }    }    dfs(0, p);    printf("%.1f\n", ans);  }  return 0;}

1080

#include<cmath>#include<map>#include<iostream>#include<cstring>#include<cstdio>#include<set>#include<vector>#include<algorithm>using namespace std;typedef long long ll;const int N = 4e4+5;const int INF = 0x3f3f3f3f;const double eps = 1e-7;const int MOD = 1e9+7;int quota[105];int Ge[N], Gi[N], Ch[N][6];int Id[N];int cmp(int a, int b) {  if(Ge[a]+Gi[a] != Ge[b]+Gi[b]) return Ge[a]+Gi[a] > Ge[b]+Gi[b];  else return Ge[a] > Ge[b];}vector<int> ans[105];int has[N];int n,m,k;void solve(int fr, int to) {  int temp[105];  for(int i = 0; i < k; ++i) {    int cnt = 0;    for(int j = 0; j < m; ++j) temp[j] = ans[j].size();    for(int j = fr; j <= to; ++j) {      int tt = Ch[Id[j]][i];      if(has[Id[j]]) continue;      cnt ++;      if(temp[tt] < quota[tt]) {        ans[tt].push_back(Id[j]);        has[Id[j]] = 1;      }    }    if(!cnt) break;  }}int main() {  while(~scanf("%d %d %d", &n, &m, &k)) {    memset(has, 0, sizeof(has));    for(int i = 0; i < m; ++i) ans[i].clear();    for(int i = 0; i < m; ++i) scanf("%d", &quota[i]);    for(int i = 0; i < n; ++i) {      scanf("%d %d", &Ge[i], &Gi[i]);      for(int j = 0; j < k; ++j) {        scanf("%d", &Ch[i][j]);      }    }    for(int i = 0; i <= n; ++i) Id[i] = i;    sort(Id, Id+n, cmp);    Ge[n] = INF;    int fr = 0; int to = -1;     for(int i = 0; i < n; ++i) {      to ++;      if(Ge[Id[i]]+Gi[Id[i]] != Ge[Id[i+1]]+Gi[Id[i+1]] || Ge[Id[i]] != Ge[Id[i+1]]) solve(fr, to), fr = to+1;    }    for(int i = 0; i < m; ++i) {      sort(ans[i].begin(), ans[i].end());      for(int j = 0; j < ans[i].size(); ++j) {        if(j) printf(" "); printf("%d",ans[i][j]);      }      printf("\n");    }  }  return 0;}
原创粉丝点击