栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1055 BULK MAILING

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1055 BULK MAILING

#include <stdio.h>#include <string.h>#include <iostream>using namespace std;struct Bundle {     int letter_cnt, bun_cnt; };Bundle buns[100000];char buffer[10], invalid_record[100000][10];int invalid_cnt, zip_cnt[100000], total_letters, total_buns;bool M[100000];bool validity_check(char buffer[]){    //位数检查    if (strlen(buffer) != 5) {        return false;    }    //数字检查    for (int i = 0; i < 5; i++) {        if (buffer[i] < '0' || buffer[i] > '9') { return false;        }    }    //全0检查    bool flag = true;    for (int i = 0; i < 5; ++i) {        if (buffer[i] != '0') { flag = false; break;        }    }    if (flag) {        return false;    }    return true;}void process1(void) {    //同5位10份以上打包    for (int i = 10000; i <= 99999; ++i) {        if (zip_cnt[i] >= 10){ while (zip_cnt[i] >= 15) {     buns[i].letter_cnt += 15;     ++buns[i].bun_cnt;     total_letters += 15;     ++total_buns;     zip_cnt[i] -= 15; } if (zip_cnt[i] >= 10) {     buns[i].letter_cnt += zip_cnt[i];     ++buns[i].bun_cnt;     total_letters += zip_cnt[i];     ++total_buns;     zip_cnt[i] = 0; }        }    }    //按序输出    printf("ZIP         LETTERS     BUNDLESn");    puts("");    for (int i = 10000; i <= 99999; ++i) {        if (buns[i].letter_cnt != 0) { printf("%d%12d%12dn", i, buns[i].letter_cnt, buns[i].bun_cnt);        }    }    puts("");    //清空三位数的桶    for (int i = 100; i <= 999; ++i) {        buns[i].letter_cnt = buns[i].bun_cnt = 0;    }}void process2(void) {    //同3位10份以上打包    for (int i = 100; i <= 999; ++i) {        int temp[100][2];        int cnt = 0, letter_cnt = 0;        for (int j = 0; j <= 99; ++j) { int num = i * 100 + j; if (zip_cnt[num] > 0) {     temp[cnt][0] = num;     temp[cnt][1] = zip_cnt[num];     letter_cnt += zip_cnt[num];     zip_cnt[num] = 0;     ++cnt; }        }        while (letter_cnt >= 15) { ++buns[i].bun_cnt; ++total_buns; buns[i].letter_cnt += 15; total_letters += 15; letter_cnt -= 15;        }        if (letter_cnt >= 10) { ++buns[i].bun_cnt; ++total_buns; buns[i].letter_cnt += letter_cnt; total_letters += letter_cnt; letter_cnt = 0;        }        while (letter_cnt > 0) { if (temp[cnt - 1][1] >= letter_cnt) {     zip_cnt[temp[cnt - 1][0]] += letter_cnt;     break; } else {     zip_cnt[temp[cnt - 1][0]] += temp[cnt - 1][1];     letter_cnt -= temp[cnt - 1][1];     --cnt; }        }        if (buns[i].letter_cnt > 0) { printf("%dxx%12d%12dn", i, buns[i].letter_cnt, buns[i].bun_cnt);        }    }    puts("");}void process3(void) {    //first class 输出    for (int i = 10000; i <= 99999; ++i) {        if (zip_cnt[i] > 0){ printf("%d%12d%12dn", i, zip_cnt[i], 0); total_letters += zip_cnt[i];        }    }    puts("");}void output_invalid(void) {    //非法zip-pre输出    printf("INVALID ZIP CODESnn");    for (int i = 0; i < invalid_cnt; ++i) {        bool flag = true;        for (int j = 0; j < i; ++j) { if (strcmp(invalid_record[i], invalid_record[j]) == 0) {     flag = false; }        }        if (flag) { printf("%sn", invalid_record[i]);        }    }}int main(void) {     invalid_cnt = 0;    while (scanf("%s", buffer) != EOF) {        if (validity_check(buffer)) { //桶排序 int num = 0; for (int i = 0; i < 5; ++i) {     num = num * 10 + buffer[i] - '0'; } ++zip_cnt[num];        } else { strcpy(invalid_record[invalid_cnt], buffer); ++invalid_cnt;        }    }    process1();    process2();    process3();    printf("TOTALS%11d%12dnn", total_letters, total_buns);    output_invalid();    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378621.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号