1.讀題:本題的題目需要好好理解一下,剛開始給的是id依次1~ n的得分,然後再給的是rank1~ rank n的id,題目說的不是很清楚。
2.基本思路就是貪心。為了使後面選手的選擇空間更大,rank靠前的選手因盡能力分高,這道題就僅此而已了。另外id並列的情況也很容易分析,詳情可以看**。
3.本題要考慮浮點數精度的問題。比較明智的做法是,由於給的和輸出的都是兩位小數,所以輸入時乘100,輸出時除100。
#include
#include
#include
#include
#include
#define _for(i,a,b) for(int i = (a); i<(b); i++)
using
namespace
std;
const
int maxn = 20000;
struct node a[maxn],b[maxn]; // b為原始輸入,a為按rank排好序的
int n;
int score(int last, int i) ;
sort(temp, temp + 8, greater() ); // sort降序排列的方法,不要忘了()
if (a[i - 1].id < a[i].id)
else
return -1;
}int main()
int t;
_for(i, 0, n)
int last = 300000 + 100;
_for(i, 0, n)
if (last == -1) printf("case %d: no solution\n", ++kase);
else
printf("case %d: %.2f\n",++kase,(double)last/100);
}return
0;}
1.讀入的浮點數往往有誤差,比如9.53讀成9.5299999999這種,這時候為了避免可以使用round函式,其功能是四捨五入。不過講道理這種誤差這麼大的情況少見,所以只要記得遇到了可以用round就可以了。 uva1612 直接根據題意貪心
思路 三門分數,然後就是8種組合,先預處理出來每種組合,然後就是根據題意去貪心了,然前面的分數在滿足條件的情況下盡量高。author crazy ac jamesqi time 2015 file name pragma comment linker,stack 1024000000,1024000...
uva 10382題解(貪心)
題目大意 有一塊草坪,長為l,寬為w,在它的水平中心線上有n個位置可以安裝噴水裝置,各個位置上的噴水裝置的覆蓋範圍為以它們自己的半徑ri為圓。求出最少需要的噴水裝置個數。8 20 2 5 34 1 1 27 2 10 2 13 3 16 2 19 4 3 10 1 3 59 3 6 13 10 1 ...
UVA 11729 簡單貪心
新增鏈結描述 結論 根據完成的時間排序。證明 假設交代任務時間為a,完成任務時間為b。選取n個人之中的兩個人進行觀察,這兩個人之間的順序對其他人不產生影響,假設b1 b2,當b1在前面的時候,二者為max1 a1 a2 b2,a1 b1 當b1在後面的時候max2 a2 b2,a1 a2 b1 因為...