第一道題,先是題看錯了,貪心的時候沒有貪心對,改了1mol,最後才改對,預計正常用時20min。
1 #include2 #include3 #include4 #include5 #include6using
namespace
std;78
const
int maxn=10000+10;9
const
long
long mods=1000000009;10
11int
n;12
long
long t=0;13
long
long ans=0;14
15struct
nodepeo[maxn];
1819
bool
cmp(node a,node b)
2023
24void
readdate()
2534 sort(peo+1,peo+1+n,cmp);
35return;36
}3738void
work()
3944 cout4647
intmain()
48
第二道題也十分簡單,不就是乙個普通的加減值問題嗎?
但是,我首先想到的是用公式
設g1為大於答案值的個數,g2是小於答案值的個數,s1是大於答案的每個數的總和,s2是小於答案的每個數的總和。同時,答案為x,能量損失為a。
則有:(s1-h1*x)*a = h2*x - s2
樣例過了,但是好像有精度上的問題。
1 #include2 #include3 #include4 #include5 #include6using
namespace
std;78
const
int maxn=10000+10;9
10int
n,k;
11int
shu[maxn];
12int
sum;
13int
sum1,sum2;
14int
g1,g2;
15double
pin,ans;
1617
void
readdate()
1825 sort(shu+1,shu+n+1
);26 pin = (sum*1.0) / (n*1.0
); //我們可以輕易證得,答案 < 所有數加起來的平均數,(因為有能量損失)
27for(int i=1;i<=n;i++)
2834
else
3539}40
return;41
}4243void
work()
4449
50int
main()
51
其次,我才想到了二分答案。
首先讀入每個數,在讀的時候要特判,如果讀進去的數都是一樣的,或者n==1,即只有乙個值,那我們就可以直接輸出了。
然後讀完了所有數後,要進行sort排序,我是按照從大到小排序的,講二分的 l 設為數列裡最小的,r 設為最大的。因為是double型,有精度問題,所以while迴圈的條件就是(r-l)> 10-12 ,然後就是常規取mid了。這個地方,check的條件也是十分明顯的。首先把所有大於mid的數加起來(因為精度問題,也需要用(a-mid)> 10-12 來判斷大小),然後每次乙個比它小的數,就從sum中減去,如果不夠了,就說明我們列舉的ans大了,這時候就r=mid,否則這個方案就是可行的,l=mid(同時我習慣於在這一步就把答案更新為l)。
1 #include2 #include3 #include4 #include5 #include6using
namespace
std;78
const
int maxn=10000+10;9
10int
n,k;
11double
shu[maxn];
12double
l,r,mid;
13double
ans;
14bool
flag;
1516
bool cmp(double x,double
y)17
2021
void
readdate()
2230
if(!flag || n==1
) //特判
3135 sort(shu+1,shu+1+n,cmp);
36 l=shu[n];
37 r=shu[1
];38}39
40bool check(double
now)
4149
else
5056
else
5760}61
}62return
true;63
}6465void
work()
6675
else
7679
}80 printf("
%.9f\n
",ans);81}
8283
intmain()
84
第三道題,很明顯的乙個最長上公升子串行嘛。注意的條件不就是要判斷兩個相鄰值之間項數差值是否大於d,以及注意資料範圍,用nlogn的方法求最長上公升子串行就可以了。我用的是之前在一道題解裡看到過得求上公升子串行的方法,正好有乙個q的陣列可以來判斷d的關係。
1 #include2 #include3 #include4 #include5 #include6using
namespace
std;78
const
int maxn=100000+10;9
10int
n,d,tot;
11int
q[maxn];
12int
c[maxn];
13int
s[maxn];
1415
intmain()
1625
for(int i=1;i<=n;i++)
2634 cout36return0;
37 }
至於第四道題嘛,洛谷上的大佬都講得很清楚了,乙個狀壓dp。
1 #include2 #include3 #include4using
namespace
std;56
int floors[5200][15];7
int f[5200];8
int maps[15][15];9
intn,m,st,en,va;
10int ans=0x3f3f3f;11
12void
clear()
1317
18void work(int
k)1938}
39 ans=min(ans,f[n-1
]); 40}
4142
intmain()
4352
for(int i=0;i)
5357 cout58return0;
59 }
MZOJ 1063 士兵守衛
bob特別喜歡戰略遊戲,但有時他不能盡快找到最優解,所以他就很傷心。現在他又有乙個問題,他必須保衛乙個中世紀的城市,這個城市的道路形成了一棵樹。他需要在樹的節點上放最少的士兵來觀察所有的邊。你能幫助他麼?例如下圖就只需要乙個士兵放在1號節點。輸入檔案中有多組資料,每組資料的第一行n表示點的個數。接下...
MZOJ2007 路燈的改建計畫
問題描述 一天晚上,我們資訊學競賽班的sfj 同學正往校門外走,忽然眼前一片漆黑,於是直 接把眼鏡都摔掉了,再也找不到。後來sfj 同學從學校管理處了解到昨晚路燈突然熄滅是 因為電路不堪重負,導致空氣開關跳閘。sfj同學仔細了解每盞路燈的耗電量a i 與照明度z i 已知共有n 盞電燈,並且 每盞電...
FME 2018 0發布及22大新功能
下面介紹該版本的22大功能。連線和轉換 更多的資料格式和變換能力 1 新的格式 讀模組 寫模組 bentley i model reader v1 cals continuous acquisition and life cycle support raster reader writer esri...