從右到左分別為0-n輛車,每輛車有長度l,起始位置s和速度v,0座標在左邊,不能超車,單車道,問0號車到達0座標的最短時間。
最短時間考慮二分時間,然後按這個時間從左邊第一輛車開始依次計算最終位置,最後判斷0號車的位置即可。
#include using namespace std;
const int n=1e5+50;
const double eps=1e-12;
int l[n],s[n],v[n];
int n;
bool check(double t)
return st<=0;
}int main(void)
for(int i=0;i<=n;i++)
for(int i=0;i<=n;i++)
double l=0.0,r=1e9;
double ans;
while(fabs(l-r)>=eps)else
}printf("%.10lf\n",ans);
}return 0;
}
具體見
給乙個字串,以及每個字元出現次數的限制,找到長度為k的字典序最小的且滿足次數限制的子串行。
序列自動機預處理出每個位置後面每個字元第一次出現的位置和個數,然後每次取出滿足條件的最小字元,即取了該字元後,剩下的字串也要滿足最小條件。
不滿足條件的情況可能是
#include using namespace std;
const int n=1e5+50;
char s[n];
int k;
int l[26],r[26],v[26];
int nxt[n][26],cnt[n][26];
int main(void)
int n=strlen(s+1);
for(int i=0;i<26;i++)
//序列自動機預處理出每個位置後面每個字元第一次出現的位置和個數
for(int i=n-1;i>=0;i--)
nxt[i][s[i+1]-'a']=i+1;
cnt[i][s[i+1]-'a']++;
}bool flag=true;
string ans="";
int t=0;
//每次貪心取最小的,判斷剩下字尾能否滿足要求
for(int i=0;ir[q])
}//雖然選了這個字元之後,剩餘字尾每個字元數量都能滿足限制,但加起來總數不夠
if(k-i-1v[j]--;
if(ac)}}
if(j==26)
}if(flag)else
}return 0;
}
2019杭電多校第一場
dp i j k t dp i j k t dp i j k t 表示0 1 2,3 0,1,2,3 0,1,2,3出現的位置排序後為i,j k,t i,j,k,t i,j,k,t的方案數 列舉第t 1 t 1t 1位的情況進行轉移 對於限制情況,固定右端點,暴力列舉所有狀態,把所有非法狀態清零 i...
2019 杭電多校(第一場)
題目 1002 operation 線性基 題意給你n個數 兩個操作,查詢l r區間異或最大值 在陣列最後麵加一數 思路維護兩個陣列 1 b i j 儲存a 1 到a i 之間的第j位線性基。2 pos i j 儲存最大的l a l 使得b i j 有值。對於每一次詢問 l,r 如果pos r j ...
2019 杭電多校 第一場
2019 multi university training contest 1 給定包含 n 個數的序列,m 個詢問。詢問有兩種操作,操作 0 表示在陣列最後新增乙個新元素,操作 1 表示查詢區間 l,r 的子集的異或最大值。線性基 貪心一條路上有 n 1 輛車。第 i 輛車的長度為 l i 離終...