23日总结
2037
贪心策略
#include <stdio.h>
#include <algorithm>
using namespace std;
struct program{//电视节目结构体
int startTime;//节目开始时间
int endTime;//节目结束时间
bool operator < (const program& A) const{
//重载小于号保证sort函数能够按照结束时间升序排列
return endTime<A.endTime;
}
}buf[100];
int main(int argc, char *argv[])
{
int n;
while(scanf("%d",&n)!=EOF,n)
{
for(int i=0;i<n;i++)
{
scanf("%d%d",&buf[i].startTime,&buf[i].endTime);
}
sort(buf,buf+n);//按照结束时间升序排列
int currentTime=0,ans=0;// 记录当前时间初始值为0,答案计数初始值为0;
for(int i=0;i<n;i++)//遍历节目
{
if(currentTime<=buf[i].startTime)
{
currentTime=buf[i].endTime;//当前时间变为该节目结束时间
ans++;
}
}
printf("%d\n",ans);
}
return 0;
}
2036
#include <bits/stdc++>
using namespace std;
int x[100],y[100];
float s(int a,int b,int c,int d,int e,int f){
return (a*d+c*f+b*e-e*d-c*b-a*f)/2.0;
}
int main()
{
int n;
while(cin>>n&&n!=0){
float res=0;
for(int i=0;i<n;i++)
cin>>x[i]>>y[i];
for(int i=0;i<n-2;i++){
//triangle
res=res+s(x[0],y[0],x[i+1],y[i+1],x[i+2],y[i+2]);
}
printf("%.1f\n",res);
}
return 0;
}
2040
亲和数
#include<iostream>
int main() {
int n;
cin >> n;
while(n--) {
int a,b,sum1=0,sum2=0;
cin >> a >> b;
for(int l=1; l<=a/2; l++)
if(a%l==0)
sum1+=l;
for(int l=1; l<=b/2; l++)
if(b%l==0)
sum2+=l;
if(sum1==b&&sum2==a)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}
24日
2059
#include <iostream>
#include <cstring>
using namespace std;
int L, N, C, T;
int VR, VT1, VT2;
int p[102];
double dp[105];
void DP()
{
double min, ans;
memset(dp, -1, sizeof(dp));
dp[0] = 0;
for(int i = 1; i < N + 2; i++)
{
min = 10000000000;
for(int j = 0; j < i; j++)
{
int len = p[i] - p[j]; //判断两个点之间的距离
if(len > C) //距离大于电动车的最大距离,一段距离需要脚踩
{
ans = 1.0 * C / VT1 + (len - C + 0.0) / VT2;
}
else //全程骑车。
{
ans = 1.0 * len / VT1;
}
ans += dp[j]; //加上前面的时间
if(j) //过充电站,加上充电时间
ans += T;
if(min > ans) //找最小时间
min = ans;
}
dp[i] = min;
}
}
int main()
{
while(scanf("%d", &L) != EOF) //输入
{
scanf("%d%d%d", &N, &C, &T);
scanf("%d%d%d", &VR, &VT1, &VT2);
for(int i = 1; i <= N; i++)
scanf("%d", &p[i]);
p[0] = 0; p[N + 1] = L; //起点距离为0,终点距离为 L
DP();
if(1.0 * L / VR < dp[N + 1]) //判断时间与兔子的时间的大小
printf("Good job,rabbit!\n");
else
printf("What a pity rabbit!\n");
}
return 0;
}