周一训练赛题解
这次完全是水题大集合啊,希望大家A的开心;
前两个题是我找的,后两个是陶叔找的,另外因为我的偷懒,下面所有的代码都是陶叔亲自写的,十分感谢陶叔;
陶叔暑假为了大家的集训,牺牲了很多自己宝贵的时间,大家接下来要好好训练啊!!!!
废话少说,进入正题:
Problem A SPOJ QUEST5
签到题:
将所有的边按照右端点排个序,然后每次选择没有钉住的点,然后把这之后的所有与它相交的边全去掉;
代码:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 10100; struct Table{ int l,r; bool operator < (const Table &rhs) const{ return r < rhs.r; } }table[maxn]; int main(){ int kase,n; scanf("%d",&kase); while(kase--){ scanf("%d",&n); for(int i = 0;i < n;i++){ scanf("%d%d",&table[i].l,&table[i].r); } sort(table,table+n); int ans = 0,r = -1; for(int i = 0;i < n;i++){ if(r < table[i].l){ ans++; r = table[i].r; } } printf("%d ",ans); } return 0; }
Problem B SPOJ FAVDICE
数学题,也是给大家YY的题,不会只能怪高中老师了~~~
从已经出现i面变成已经出现i+1面的期望投掷次数是N/(N-i)。
代码:
#include <cstdio> int main(){ int kase,n; scanf("%d",&kase); while(kase--){ scanf("%d",&n); double ans = 0; for(int i = 1;i <= n;i++) ans += (n+0.0)/(i+0.0); printf("%.2f ",ans); } return 0; }