lrj紫书第五章

UVA-1592

 1 // UVa1592 Database
 2 // Rujia Liu
 3 // 本程序只是为了演示STL各种用法,效率较低。实践中一般用C字符串和哈希表来实现。
 4 
 5 #include<iostream>
 6 #include<cstdio>
 7 #include<vector>
 8 #include<string>
 9 #include<map>
10 #include<sstream>
11 using namespace std;
12 
13 typedef pair<int,int> PII;
14 
15 const int maxr = 10000 + 5;
16 const int maxc = 10 + 5;
17 
18 int m, n, db[maxr][maxc], cnt;
19 
20 map<string, int> id;
21 int ID(const string& s) {
22   if(!id.count(s)) {
23     id[s] = ++cnt;
24   }
25   return id[s];
26 }
27 
28 void find() {
29   for(int c1 = 0; c1 < m; c1++)
30     for(int c2 = c1+1; c2 < m; c2++) {
31       map<PII, int> d;
32       for(int i = 0; i < n; i++) {
33         PII p = make_pair(db[i][c1], db[i][c2]);
34         if(d.count(p)) {
35           printf("NO\n");
36           printf("%d %d\n", d[p]+1, i+1);
37           printf("%d %d\n", c1+1, c2+1);
38           return;
39         }
40         d[p] = i;
41       }
42     }
43   printf("YES\n");
44 }
45 
46 
47 int main() {
48   string s;
49   while(getline(cin, s)) {
50     stringstream ss(s);
51     if(!(ss >> n >> m)) break;
52     cnt = 0;
53     id.clear();
54     for(int i = 0; i < n; i++) {
55       getline(cin, s);
56       int lastpos = -1;
57       for(int j = 0; j < m; j++) {
58         int p = s.find(',', lastpos+1);
59         if(p == string::npos) p = s.length();
60         db[i][j] = ID(s.substr(lastpos+1, p - lastpos - 1));
61         lastpos = p;
62       }
63     }
64     find();
65   }
66   return 0;
67 }
View Code

UVA-207

  1 // UVa207 PGA Tour Prize Money
  2 // Rujia Liu
  3 #include<cstdio>
  4 #include<cstdlib>
  5 #include<cstring>
  6 #include<cmath>
  7 #include<algorithm>
  8 #include<cassert>
  9 using namespace std;
 10 
 11 #define REP(i,n) for(int i = 0; i < (n); i++)
 12 
 13 const int maxn = 144;
 14 const int n_cut = 70;
 15 
 16 struct Player {
 17   char name[25];
 18   int amateur;
 19   int sc[4];
 20   int sc36, sc72, dq;
 21   int rnds;
 22 } player[maxn];
 23 
 24 int n;
 25 double purse, p[n_cut];
 26 
 27 bool cmp1(const Player& p1, const Player& p2) {
 28   if(p1.sc36 < 0 && p2.sc36 < 0) return false; // equal
 29   if(p1.sc36 < 0) return false; // p2 smaller
 30   if(p2.sc36 < 0) return true; // p1 smaller
 31   return p1.sc36 < p2.sc36;
 32 }
 33 
 34 bool cmp2(const Player& p1, const Player& p2) {
 35   if(p1.dq && p2.dq) {
 36     if(p1.rnds != p2.rnds) return p2.rnds < p1.rnds;
 37     if(p1.sc72 != p2.sc72) return p1.sc72 < p2.sc72;
 38     return strcmp(p1.name, p2.name) < 0;
 39   }
 40   if(p1.dq) return false;
 41   if(p2.dq) return true;
 42   if(p1.sc72 != p2.sc72) return p1.sc72 < p2.sc72;
 43   return strcmp(p1.name, p2.name) < 0;
 44 }
 45 
 46 void print_result() {
 47   printf("Player Name          Place     RD1  RD2");
 48   printf("  RD3  RD4  TOTAL     Money Won\n");
 49   printf("---------------------------------------");
 50   printf("--------------------------------\n");
 51 
 52   int i = 0, pos = 0;
 53   while(i < n) {
 54     if(player[i].dq) {
 55       printf("%s           ",player[i].name);
 56       REP(j,player[i].rnds) printf("%-5d", player[i].sc[j]);
 57       REP(j,4-player[i].rnds) printf("     ");
 58       printf("DQ\n");
 59       i++;
 60       continue;
 61     }
 62 
 63     int j = i;
 64     int m = 0; // number of tied players
 65     bool have_money = false;
 66     double tot = 0.0; // total pooled money
 67     while(j < n && player[i].sc72 == player[j].sc72) {
 68       if(!player[j].amateur) {
 69         m++;          
 70         if(pos < n_cut) {
 71           have_money = true; // yeah! they still have money
 72           tot += p[pos++];
 73         }
 74       }
 75       j++;
 76     }
 77 
 78     // print player [i,j) together because they have the same rank
 79     int rank = i + 1; // rank of all these m players
 80     double amount = purse * tot / m; // if m=0, amount will be nan but we don't use it in that case :)
 81     while(i < j) {
 82       printf("%s ", player[i].name);
 83       char t[5];
 84       sprintf(t, "%d%c", rank, m > 1 && have_money && !player[i].amateur ? 'T' : ' ');
 85       printf("%-10s", t);
 86       REP(e,4) printf("%-5d", player[i].sc[e]);
 87 
 88       // with prize
 89       if(!player[i].amateur && have_money) {
 90         printf("%-10d", player[i].sc72);
 91         printf("$%9.2lf\n", amount / 100.0);
 92       } else
 93         printf("%d\n", player[i].sc72);
 94       i++;
 95     }
 96   }
 97 }
 98 
 99 int main() {
100   int T; 
101   char s[40];
102 
103   gets(s);
104   sscanf(s,"%d",&T);
105   while(T--) {
106     gets(s); // empty line
107 
108     // prize
109     gets(s);
110     sscanf(s,"%lf", &purse);
111     REP(i,n_cut) {
112       gets(s);
113       sscanf(s, "%lf", &p[i]);
114     }
115 
116     // players
117     gets(s);
118     sscanf(s, "%d", &n);
119     assert(n <= 144);
120     REP(k,n) {
121       // read a 32-character line
122       gets(s);
123 
124       // player name
125       strncpy(player[k].name, s, 20);      
126       player[k].name[20] = 0;
127       player[k].amateur = 0;
128       if(strchr(player[k].name, '*')) {
129         player[k].amateur = 1;
130       }
131 
132       // scores
133       player[k].sc36 = player[k].sc72 = player[k].dq=0;
134       memset(player[k].sc, -1, sizeof(player[k].sc));
135       REP(i,4) {
136         // raw score
137         char t[5];
138         REP(j,3) t[j] = s[20 + i*3 + j]; t[3] = '\0';
139 
140         // parse
141         if(!sscanf(t,"%d", &player[k].sc[i])) {
142           // DQ!
143           player[k].rnds = i;
144           player[k].dq = -1;
145           if(i < 2) player[k].sc36 = -1;
146           break; // skip other rounds (filled with -1, initially)
147         } else {          
148           player[k].sc72 += player[k].sc[i];
149           if(i < 2)
150             player[k].sc36 += player[k].sc[i];
151         }
152       }
153     }
154 
155     // round 1
156     sort(player, player+n, cmp1);
157     assert(player[n_cut-1].sc36 >= 0);
158     for(int i = n_cut-1; i < n; i++)
159       if(i == n-1 || player[i].sc36 != player[i+1].sc36) { n = i+1; break; }
160 
161     // round 2
162     sort(player, player+n, cmp2);
163     
164     // print result
165     print_result();
166  
167     if(T) printf("\n");
168   }
169   
170   return 0;
171 }
View Code

 

转载于:https://www.cnblogs.com/yijiull/p/7041367.html

标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则和常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化和改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
在金融行业中,对信用风险的判断是核心环节之一,其结果对机构的信贷政策和风险控制策略有直接影响。本文将围绕如何借助机器学习方法,尤其是Sklearn工具包,建立用于判断信用状况的预测系统。文中将涵盖逻辑回归、支持向量机等常见方法,并通过实际操作流程进行说明。 一、机器学习基本概念 机器学习属于人工智能的子领域,其基本理念是通过数据自动学习规律,而非依赖人工设定规则。在信贷分析中,该技术可用于挖掘历史数据中的潜在规律,进而对未来的信用表现进行预测。 二、Sklearn工具包概述 Sklearn(Scikit-learn)是Python语言中广泛使用的机器学习模块,提供多种数据处理和建模功能。它简化了数据清洗、特征提取、模型构建、验证与优化等流程,是数据科学项目中的常用工具。 三、逻辑回归模型 逻辑回归是一种常用于分类任务的线性模型,特别适用于二类问题。在信用评估中,该模型可用于判断借款人是否可能违约。其通过逻辑函数将输出映射为0到1之间的概率值,从而表示违约的可能性。 四、支持向量机模型 支持向量机是一种用于监督学习的算法,适用于数据维度高、样本量小的情况。在信用分析中,该方法能够通过寻找最佳分割面,区分违约与非违约客户。通过选用不同核函数,可应对复杂的非线性关系,提升预测精度。 五、数据预处理步骤 在建模前,需对原始数据进行清理与转换,包括处理缺失值、识别异常点、标准化数值、筛选有效特征等。对于信用评分,常见的输入变量包括收入水平、负债比例、信用历史记录、职业稳定性等。预处理有助于减少噪声干扰,增强模型的适应性。 六、模型构建与验证 借助Sklearn,可以将数据集划分为训练集和测试集,并通过交叉验证调整参数以提升模型性能。常用评估指标包括准确率、召回率、F1值以及AUC-ROC曲线。在处理不平衡数据时,更应关注模型的召回率与特异性。 七、集成学习方法 为提升模型预测能力,可采用集成策略,如结合多个模型的预测结果。这有助于降低单一模型的偏差与方差,增强整体预测的稳定性与准确性。 综上,基于机器学习的信用评估系统可通过Sklearn中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值