寒假学习每日总结

今天学习的时间不是很多(*^*),谁让我只是一个卑微的帅哥……

上午基本上在忙其他事情,所以只能晚上熬夜肝任务了555~


1.python的学习

2.数据库相关软件的安装

3.算法基础练习(这几天就搞搞贪心算法了)


1.今天主要学的是有关于字符串的操作(主要是一点简单的操作...):

笔记如下:

一:

 二:

 三:

 四:

五;

 

 

2.数据库相关软件的安装;

介个转载其他人的链接吧...主要是人家介绍的特别详细:

 使用PowerDesigner创建MySQL数据库

PowerDesigner16.5下载和安装教程

3.算法基础练习;

题目一:

题目描述

有 n个人在一个水龙头前排队接水,假如每个人接水的时间为 Ti​,请编程找出这 n个人排队的一种顺序,使得 n 个人的平均等待时间最小。

输入格式

第一行为一个整数 n。

第二行 n 个整数,第 i个整数 Ti​ 表示第 i个人的等待时间Ti​。

输出格式

输出文件有两行,第一行为一种平均时间最短的排队顺序;第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。

输入输出样例

输入 

10 
56 12 1 99 1000 234 33 55 99 812

输出 

3 2 7 8 1 4 9 6 10 5
291.90

 算法思路:

题目要求输出平均时间最短的排队顺序和这种排列方案下的平均等待时间 。

1.若要等待时间最短,我们可以按时间长短从小到大排序,排队总时间为每个人的排队时间和总的接水时间之和。

2.用结构体记录分别每个人的排队编号b(好处是sort排序后原下标仍然被记录)和等待时间value

3.仿函数设计排序规则 

题解代码:

#include<iostream>
#include <iomanip>
#include<algorithm>
using namespace std;

struct dui {
	int value;
	int b;
}; 
dui d[1001];

bool comp(const dui &a,const dui &b) {
	if (a.value == b.value) {
		return a.b < b.b; 
	}
	else
		return a.value < b.value;
}

int main() {
	int n;
	double sum = 0.0;
	cin >> n;
	for (int i = 1; i <=n;i++) {
		cin >> d[i].value;
		d[i].b = i;
	}
	sort(d + 1,d+n+1,comp);
	for (int i = 1; i <= n;i++) {
		cout << d[i].b<<" ";
		sum += (n - i) * d[i].value; //第i个人耗费的其他人需要等待的时间
	}
	printf("\n%.2f",sum/n);

	return 0;
}

题目二:

题目描述

现在各大 oj 上有 n个比赛,每个比赛的开始、结束的时间点是知道的。

yyy 认为,参加越多的比赛,noip 就能考的越好。

所以,他想知道他最多能参加几个比赛。

由于 yyy 是蒟蒻,如果要参加一个比赛必须善始善终,而且不能同时参加 2 个及以上的比赛。

输入格式

第一行是一个整数 n,接下来 n 行每行是 2个整数 ai,bi(ai<bi)表示比赛开始、结束的时间。

输出格式

一个整数最多参加的比赛数目。

输入输出样例

输入 #1复制

3
0 2
2 4
1 3

输出 #1复制

2

说明/提示

对于 20\%20% 的数据, n <=10

对于 50\%50% 的数据,  n <=10^3

对于 70\%70% 的数据, n <=10^5

对于 100\%100% 的数据, 1<= n <=10^6 ,0<=ai<bi<=10^6。

算法思路比较简单,狗命要紧,睡觉了//^_^//!...

#include<iostream>
#include <iomanip>
#include<algorithm>
using namespace std;

struct px{//(定义一个结构体数组,分别储存开始时间和结束时间)
    int a;//(开始时间)
    int b;//(结束时间)
    }x[2000000];
    bool cmp(px x,px y){//直接按照结束时间排序
    return x.b<y.b;
    }
   
    int main(){
    int n,sum=1,mi;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    cin>>x[i].a>>x[i].b;//(读入数据)
    sort(x+1,x+n+1,cmp);//(排序)
    mi=x[1].b;//(记录第一个值)
    int j=1;
    while(j<=n)
    {
        j++;
        if(x[j].a>=mi) {//(找到符合要求的比赛,记录,参加)
        sum++;//(计数)
        mi=x[j].b;}
    }
    cout<<sum;//(输出)
    return 0;
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值