CCF刷题记录——0721

201412-3
题目不难,思路简单,暴力求解。
一开始题目没太搞明白,花了点时间理解,第一次提交80分,检查后发现变量用的int,题目范围可能越界,改为long long 通过。

#include<iostream>
#include<stdlib.h>
#include<string.h> 
#include <bits/stdc++.h>
#include "sstream"
using namespace std;

typedef struct {
	float price=0;
	int num=0;
	int cancel=0;
	int flag;//0为buy,1为sell 
}node;


int main(){
	node a[5000];
	string str;
	int i=1,j;
	while(cin>>str){
		if(str[0]=='b'){
			cin>>a[i].price>>a[i].num;
			a[i].flag=0;
		}else if(str[0]=='s'){
			cin>>a[i].price>>a[i].num;
			a[i].flag=1;
		}else if(str[0]=='c'){
			cin>>j;
			a[j].cancel=1;
		}
		i++;
	}
	float p,final;
	long long max=0,sum=0,buy=0,sell=0;
	for(j=1;j<=i;j++){
		sum=0;
		sell=0;
		buy=0;
		p=a[j].price;
		for(int k=1;k<=i;k++){
			if(a[k].flag==0&&a[k].price>=p&&!a[k].cancel){
				buy+=a[k].num;
			}else if(a[k].flag==1&&a[k].price<=p&&!a[k].cancel){
				sell+=a[k].num;
			}
		}
		sum=(buy<sell)?buy:sell;
		if(sum>max){
			max=sum;
			final=p;
		}else if(sum==max){
			final=(final>p)?final:p;
		}
	}
	printf("%.2f %lld\n",final,max);
    return 0;
}
//

201412-4 最优灌溉
被之前写的bfs题迷惑了,一开始把它当成图求解,乱求,求不出最短,后google发现题目就理解错了,这是树的求解。

struct node {
    int a, b, c;
};
node edge[100005];

int fa[1005];

bool compare(const node&a, const node &b){
     return a.c < b.c;
}
//找父节点 
int father(int x) {return (fa[x] == x) ? x : (fa[x] = father(fa[x]));}

bool combine(int x, int y) {
    int fx = father(x), fy = father(y);
    if (fx != fy) {fa[fx] = fy; return true;}
    return false;
}

int main() {
    int n, m;
    cin>>n>>m;
    for (int i=0;i<m;++i) cin>>edge[i].a>>edge[i].b>>edge[i].c;
    sort(edge,edge+m,compare);
    for (int i=1;i<=n;++i) fa[i] = i;
    long long ans = 0;
    for (int i=0, k=0; k<n-1; ++i)
        if (combine(edge[i].a, edge[i].b) == true){
			k++; 
			ans += edge[i].c;
		}

    cout<<ans<<endl;

    return 0;
}
//

今天就写了两题,效率低,好困
辅导员发了MSRA夏令营报名通知,五天在北京,有点点心动,但是我没有科研潜力和强烈兴趣QAQ,感觉去了会被狂虐,好吧能被选中就很幸运,还是有一丝纠结。
啊啊啊啊啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值