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,感觉去了会被狂虐,好吧能被选中就很幸运,还是有一丝纠结。
啊啊啊啊啊