Ural Regional School Programming Contest 2011

本文总结了Ural Regional School Programming Contest 2011的比赛题解,涵盖了从简单的统计问题到复杂的计算几何问题,包括足球门面积最大化、蜈蚣穿鞋策略、魔方状态转换等问题。

链接:Ural Regional School Programming Contest 2011

【2014/05/25】今天的训练做了一套大水题,最后的rank是7道题,如下,第8题在比赛结束的一分钟中居然AC了,真是神奇啊,可惜时间过了。

 


 

A - GOV Chronicles

【题意】一篇参赛记录的文章,让你统计每个队员参赛的次数。

【思路】水题,同时也很坑爹,主要是统计很麻烦,文章很长同时是英文,读都要读大半天,WA了,后来检查了一下AC了。

 1 #include <cstdio>
 2 
 3 int a[] = {5,20,12,2,1,4,6,1,4,4,1,0};
 4 int main()
 5 {
 6     int n;
 7     scanf("%d",&n);
 8     printf("%d\n",a[n]);
 9     return 0;
10 }
View Code

B - Football Goal

【题意】有一面墙,给你长度为a和b的两个木棒,通过墙,地面和木棒,围成一个四边形,使其面积最大。

【思路】直接枚举边AB,然后AB确定之后,三角形ABD面积就确定了,用海伦公式去运算。至于三角形ABO,由于其是个直角三角形,AB边长度确定之后,AO,BO可以变化,再加上勾股定理,求其面积的时候利用消元得到一个关于AB的一元二次方程,其最值是AO=BO的时候得到的,所以三角形AOB的面积最大值是 (K*K)/4.  于是最后的四边形面积是一个关于K的三角形ABD的面积用海伦公式知道是关于K的一元二次方程,具体很难化简到一般形式,所以用三分来枚举,因为他是个凸型函数。K是变长,范围是[0,a+b].

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <algorithm>
 5 #define EPS 1e-10
 6 using namespace std;
 7 
 8 double a, b;
 9 
10 double GetS(double k)
11 {
12     double p = (a + b + k) / 2;
13     return k*k/4 + sqrt(p*(p-a)*(p-b)*(p-k));
14 }
15 int main()
16 {
17     scanf("%lf%lf", &a, &b);
18     double l = 0 , r = a + b;
19     while(l + EPS < r)
20     {
21         double m1 = l + (r - l)/3;
22         double m2 = r - (r - l)/3;
23         if(GetS(m1) >= GetS(m2))
24             r = m2;
25         else
26             l = m1;
27     }
28     printf("%.9f\n", GetS(l));
29     return 0;
30 }
View Code

 

C - Angry Birds

D - Centipede's Morning

【题意】说是有一只蜈蚣,左边40条腿,右边40条腿,它有a只左鞋,b只右鞋,然后有一个穿鞋的方法,说它今天特别倒霉,求最多要多长时间穿好鞋,算是一个推公式的题吧。

【思路】考虑最坏情况,第一种最坏情况,很明显,就是把右脚的鞋子全穿一遍,然后再穿完左脚,耗时2b+40。第二种情况,先穿完左脚,再穿完右脚?不不不,还有更糟糕的情况,先给右脚穿好39只,耗时39*2,然后给左脚穿完鞋子,耗时40,再把剩下的左脚鞋子都上一遍,耗时2*(a-40),然后穿上右脚最后一只,耗时1。总耗时39+2a。取其最大值即可。

 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int a, b;
 8     scanf("%d%d",&a,&b);
 9     printf("%d\n",max(b*2+40,2*a+39));
10     return 0;
11 }
View Code

 

E - Bicycle Codes

【题意】某地有2个锁,有个小偷每天都去开锁(递增,从0000开始,每天一次),这个地方每天换个锁(第一天1号锁,第二天2号,第三天还是1号,第四天2号......),如果小偷能在9999之前开锁(开一次就可以了)。输出yes,否则no.

【思路】大水题,直接判断1号锁是否是偶数,或者2号锁是否是奇数,即小偷能够解锁。

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     char str[5];
 8     int x, y;
 9 
10     scanf("%s", str);
11     sscanf(str, "%d", &x);
12     scanf("%s", str);
13     sscanf(str, "%d", &y);
14 
15     if(x%2==1 && y%2==0)
16         puts("no");
17     else
18         puts("yes");
19 
20     return 0;
21 }
View Code

F - Rubinchik's Cube

【题意】有一个特殊的4阶魔方,只能横着转。每一层只有4个格子有颜色(4种颜色,有颜色格子旋转对称,每一层有颜色格子位置不同),所以从上面看刚好是一个4*4的彩色方块。(结合原图图像理解题意)给定一个初始状态,要求到指定状态的最小步数。

【思路】这就是那个时间到了之后才AC的题,用string来存储状态,BFS过了。

  1 #include <cstdio>
  2 #include <map>
  3 #include <queue>
  4 #include <string>
  5 using namespace std;
  6 
  7 struct state
  8 {
  9     int arr[4][4];
 10     string tostring()
 11     {
 12         string res = "";
 13         for (int i = 0; i < 4; i++)
 14         {
 15             for (int j = 0; j < 4; j++)
 16             {
 17                 res = res + (char)(arr[i][j]+'0');
 18             }
 19         }
 20         return res;
 21     }
 22 };
 23 
 24 state tostate(string x)
 25 {
 26     state t;
 27     for (int i = 0; i < 4; i++)
 28     {
 29         for (int j = 0; j < 4; j++)
 30         {
 31             t.arr[i][j] = x[i*4+j]-'0';
 32         }
 33     }
 34     return t;
 35 }
 36 map<string, int> hs;
 37 
 38 bool check(state x)
 39 {
 40     int v = x.arr[0][0];
 41     for (int i = 0; i < 2; i++)
 42     {
 43         for (int j = 0; j < 2; j++)
 44         {
 45             if (x.arr[i][j]!=v) return false;
 46         }
 47     }
 48     v = x.arr[0][2];
 49     for (int i = 0; i < 2; i++)
 50     {
 51         for (int j = 2; j < 4; j++)
 52         {
 53             if (x.arr[i][j]!=v) return false;
 54         }
 55     }
 56     v = x.arr[2][0];
 57     for (int i = 2; i < 4; i++)
 58     {
 59         for (int j = 0; j < 2; j++)
 60         {
 61             if (x.arr[i][j]!=v) return false;
 62         }
 63     }
 64     v = x.arr[2][2];
 65     for (int i = 2; i < 4; i++)
 66     {
 67         for (int j = 2; j < 4; j++)
 68         {
 69             if (x.arr[i][j]!=v) return false;
 70         }
 71     }
 72     return true;
 73 }
 74 
 75 
 76 void bfs(state s)
 77 {
 78     queue<state> q;
 79     q.push(s);
 80     hs[s.tostring()] = 0;
 81     while(!q.empty())
 82     {
 83         state e = q.front();
 84         q.pop();
 85         if (check(e))
 86         {
 87             printf("%d\n",hs[e.tostring()]);
 88             return;
 89         }
 90         state t;
 91         for (int i = 1; i <= 8; i++)
 92         {
 93             t = e;
 94             if (i == 1)
 95             {
 96                 t.arr[0][0] = e.arr[0][3];
 97                 t.arr[0][3] = e.arr[3][3];
 98                 t.arr[3][3] = e.arr[3][0];
 99                 t.arr[3][0] = e.arr[0][0];
100             }
101             if (i == 2)
102             {
103                 t.arr[0][0] = e.arr[3][0];
104                 t.arr[3][0] = e.arr[3][3];
105                 t.arr[3][3] = e.arr[0][3];
106                 t.arr[0][3] = e.arr[0][0];
107             }
108             if (i == 3)
109             {
110                 t.arr[1][1] = e.arr[1][2];
111                 t.arr[1][2] = e.arr[2][2];
112                 t.arr[2][2] = e.arr[2][1];
113                 t.arr[2][1] = e.arr[1][1];
114             }
115             if (i == 4)
116             {
117                 t.arr[1][1] = e.arr[2][1];
118                 t.arr[1][2] = e.arr[1][1];
119                 t.arr[2][2] = e.arr[1][2];
120                 t.arr[2][1] = e.arr[2][2];
121             }
122             if (i == 5)
123             {
124                 t.arr[1][0] = e.arr[0][2];
125                 t.arr[0][2] = e.arr[2][3];
126                 t.arr[2][3] = e.arr[3][1];
127                 t.arr[3][1] = e.arr[1][0];
128             }
129             if (i==6)
130             {
131                 t.arr[1][0] = e.arr[3][1];
132                 t.arr[3][1] = e.arr[2][3];
133                 t.arr[2][3] = e.arr[0][2];
134                 t.arr[0][2] = e.arr[1][0];
135             }
136             if (i==7)
137             {
138                 t.arr[0][1] = e.arr[1][3];
139                 t.arr[1][3] = e.arr[3][2];
140                 t.arr[3][2] = e.arr[2][0];
141                 t.arr[2][0] = e.arr[0][1];
142             }
143             if (i==8)
144             {
145                 t.arr[0][1] = e.arr[2][0];
146                 t.arr[2][0] = e.arr[3][2];
147                 t.arr[3][2] = e.arr[1][3];
148                 t.arr[1][3] = e.arr[0][1];
149             }
150             if (hs.find(t.tostring())==hs.end())
151             {
152                 hs[t.tostring()] = (hs[e.tostring()] + 1);
153                 q.push(t);
154             }
155             else if (hs[t.tostring()]>hs[e.tostring()]+1)
156             {
157                 hs[t.tostring()] = hs[e.tostring()]+1;
158                 q.push(t);
159             }
160         }
161     }
162 }
163 
164 int main()
165 {
166     state st;
167     for (int i = 0; i < 4; i++)
168     {
169         for(int j = 0; j < 4; j++)
170         {
171             scanf("%d",&st.arr[i][j]);
172         }
173     }
174     bfs(st);
175     return 0;
176 }
View Code

 

G - GOV-internship 2

H - Psych Up's Eigenvalues

【题意】一个ACM小队三个队员,每个人有n个数值,求出三个队员都相同的数值的个数。

【思路】水题,set搞定。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <set>
 4 #include <algorithm>
 5 
 6 using namespace std;
 7 
 8 set<int> b[3];
 9 
10 int main()
11 {
12     #ifdef HotWhite
13     freopen("in.txt", "r", stdin);
14     #endif
15     int cnt[3], num, mini = 10000000;
16     for (int i = 0; i < 3; ++i) {
17         scanf("%d", cnt+i);
18         if (mini == 10000000 || cnt[i] < mini) {
19             mini = i;
20         }
21         for (int j = 0; j < cnt[i]; ++j) {
22             scanf("%d", &num);
23             b[i].insert(num);
24         }
25     }
26     set<int>::iterator ite = b[mini].begin();
27     int res = 0;
28     for ( ; ite != b[mini].end(); ++ite) {
29         if (b[0].count(*ite) && b[1].count(*ite) && b[2].count(*ite)) {
30             res++;
31         }
32     }
33     printf("%d\n", res);
34     return 0;
35 }
View Code

 

I - Long problem statement

【题意】页数统计,给出每一页可以打印多少行,每一行最多多少个字符,然后给出一串单词,让求需要打印多少张

【思路】直接模拟即可,水题。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 
 7 int h, w, n;
 8 int cnt;
 9 
10 struct Word {
11     char str[110];
12     int len;
13 } word[10007];
14 
15 int main()
16 {
17     #ifdef HotWhite
18     freopen("in.txt", "r", stdin);
19     #endif
20     scanf("%d %d %d", &h, &w, &n);
21     for (int i = 0; i < n; ++i) {
22         scanf("%s", word[i].str);
23         word[i].len = strlen(word[i].str);
24     }
25     int tem, j = 0, tot = 0;
26     while (j < n) {
27         tem = w - word[j++].len;
28         while (j < n && 1+word[j].len <= tem) {
29             tem -= 1+word[j].len;
30             j++;
31         }
32         tot++;
33     }
34     printf("%d", (tot+(h-1))/h);
35     return 0;
36 }
View Code

J - Old Nokia

K - Ent's Birthday

【题意】一个方形的生日蛋糕,上面有n个蜡烛,要求从上面切下来一块,包含k个蜡烛,输出其中一个解即可。

【思路】计算几何题目,凸包的巧妙应用。

  1 #include <cstdio>
  2 #include <cmath>
  3 #include <algorithm>
  4 #define INF 1e9
  5 #define EPS 1e-8
  6 using namespace std;
  7 
  8 int dcmp(double x)
  9 {
 10     if (fabs(x)<EPS) return 0;
 11     return x < 0?-1:1;
 12 }
 13 
 14 struct Point
 15 {
 16     double x,y;
 17     Point(double x = 0, double y = 0):x(x),y(y) {}
 18     bool operator < (const Point a) const
 19     {
 20         if (dcmp(x-a.x)==0) return dcmp(y-a.y)<0?1:0;
 21         else return dcmp(x-a.x)<0?1:0;
 22     }
 23 } pt[10005],cpt[10005],cov[10005];
 24 typedef Point Vector;
 25 
 26 
 27 Vector operator - (Point A , Point B)
 28 {
 29     return Vector(A.x-B.x,A.y-B.y);
 30 }
 31 double Cross(Vector A, Vector B)
 32 {
 33     return A.x*B.y-A.y*B.x;
 34 }
 35 
 36 double lenth(Vector v)
 37 {
 38     return sqrt(v.x*v.x+v.y*v.y);
 39 }
 40 
 41 bool cmp(Point a, Point b)
 42 {
 43     Vector v2 = b - pt[0];
 44     Vector v1 = a - pt[0];
 45     if (dcmp(Cross(v1,v2))==0)
 46     {
 47         return dcmp(lenth(v1)-lenth(v2))<=0?true:false;
 48     }
 49     else
 50     {
 51         return dcmp(Cross(v1,v2))<0?true:false;
 52     }
 53 }
 54 
 55 int Convexhull(Point * p, int n, Point * ch)
 56 {
 57     sort(p,p+n);
 58     int m = 0;
 59     for (int i = 0; i < n; i++)
 60     {
 61         while(m>1 && dcmp(Cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])) <= 0) m--;
 62         ch[m++]=p[i];
 63     }
 64     int k = m;
 65     for (int i = n-2; i >=0; i--)
 66     {
 67         while(m>k && dcmp(Cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])) <=0) m--;
 68         ch[m++]=p[i];
 69     }
 70     if (n>1)m--;
 71     return m;
 72 }
 73 
 74 
 75 int main()
 76 {
 77     int n, k;
 78     scanf("%d%d",&n,&k);
 79     for (int i = 0; i <n; i++)
 80     {
 81         double x,y;
 82         scanf("%lf%lf",&x,&y);
 83         pt[i] = Point(x,y);
 84         if (dcmp(pt[i].x-pt[0].x)==-1)
 85         {
 86             swap(pt[0],pt[i]);
 87         }
 88         else if (dcmp(pt[i].x-pt[0].x)==0&&dcmp(pt[i].y-pt[0].y)<=0)
 89         {
 90             swap(pt[0],pt[i]);
 91         }
 92     }
 93     sort(pt+1,pt+n,cmp);
 94     int cnt = 0;
 95     cpt[cnt++] = pt[0];
 96     for (int i = 1; i < n; i++)
 97     {
 98         cpt[cnt++] = pt[i];
 99         if (cnt == k) break;
100     }
101     if (k <= 2)
102     {
103         printf("%d\n",3);
104         if (k == 1)
105         {
106             printf("-1000000000 -1000000000\n");
107             printf("%.0f %.0f\n",cpt[0].x, cpt[0].y);
108             printf("-1000000000 1000000000\n");
109         }
110         if (k == 2)
111         {
112             printf("%.0f %.0f\n",cpt[0].x,cpt[0].y);
113             printf("%.0f %.0f\n",cpt[1].x,cpt[1].y);
114             printf("-1000000000 1000000000\n");
115         }
116     }
117     else
118     {
119         int m = Convexhull(cpt,cnt,cov);
120         if (m == 2)
121         {
122             printf("%d\n",3);
123             printf("%.0f %.0f\n",cov[0].x,cov[0].y);
124             printf("%.0f %.0f\n",cov[1].x,cov[1].y);
125             printf("-1000000000 1000000000\n");
126         }
127         else
128         {
129             printf("%d\n", m);
130             for (int i = 0; i < m; i++)
131             {
132                 printf("%.0f %.0f\n",cov[i].x,cov[i].y);
133             }
134         }
135     }
136     return 0;
137 }
View Code

L - Way to the University

 

转载于:https://www.cnblogs.com/rayn1027/p/3751517.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中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
Foodpanda 的全面记录,包含 6000 条精心整理的记录,涵盖了从客户人口统计信息到订单、支付、评价和配送细节的各个方面。它为数据分析师和研究人员提供了一个丰富的资源,可用于深入分析和洞察 Foodpanda 的业务运营和客户行为。 数据集内容客户人口统计信息:数据集详细记录了客户的年龄、性别、收入水平、地理位置等基本信息。这些信息有助于了解不同客户群体的特征,为精准营销和客户细分提供数据支持。 订单信息:每条记录都包含了订单的日期、时间、金额以及购买的商品或服务。通过分析这些数据,可以发现客户的购买习惯和偏好,例如哪些时间段是订单高峰期,哪些菜品最受欢迎。 支付信息:数据集中还包含了支付方式、支付状态和支付金额等信息。这些数据可以帮助分析不同支付方式的使用频率,以及支付成功率等关键指标。 评价信息:客户对订单、服务或产品的评分和评论也被记录在数据集中。这些评价数据对于情感分析和客户满意度研究至关重要,能够帮助 Foodpanda 了解客户的真实反馈,从而改进服务质量。 配送细节:数据集还详细记录了配送时间、配送地址和配送状态等信息。通过分析这些数据,可以优化配送路线和时间,提高客户满意度。 数据集的应用场景:客户行为分析:通过分析客户的购买习惯、偏好和评价,可以更好地了解客户需求,从而提供更个性化的服务。 客户流失预测:利用数据集中的客户行为和评价数据,可以构建模型预测哪些客户可能会流失,以便提前采取措施挽留。 客户细分:根据客户的人口统计信息和购买行为,可以将客户划分为不同的群体,为每个群体提供定制化的服务和营销策略。 销售趋势分析:通过分析订单数据,可以发现销售的增长或下降趋势,为业务决策提供依据。 情感洞察:通过分析客户的评价和评论,可以了解客户对产品或服务的情感倾向,及时发现潜在问题并加以改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值