最近状态是真的不对,十分难受。
https://codeforces.com/contest/1435/problem/C
要疯狂刷cf练速度和思维 了
这题就是把他所有情况列出来,然后尺取就行了。。。。。。。。。。。。。。
我居然想了那么久。。。。。。。。。。。。。。。
#include<iostream> #include<cstring> #include<string> #include<queue> #include<vector> #include<algorithm> #include<set> using namespace std; typedef long long ll; const ll INF = 1e16; const int maxn = 2e5+11; set<int>ss; struct Node { ll val; int id; Node(ll a,int b) : val(a),id(b) {} }; vector<Node>ins; queue<Node>que; int n; int a[20]; ll list[maxn]; bool bml(Node a,Node b) { return a.val < b.val; } int vis[maxn]; int main() { for(int i=0; i<6; i++) { cin>>a[i]; ss.insert(a[i]); } int len = ss.size(); cin>>n; for(int i=0; i<n; i++) { cin>>list[i]; } for(int i=0; i<n; i++) { for(int j=0; j<6; j++) { ll x = list[i] - a[j]; if(x < 0) x = INF; ins.push_back(Node(x,i)); } } sort(ins.begin(),ins.end(),bml); int cnt = 0; ll ans = INF; for(int i=0; i<ins.size(); i++) { Node a = ins[i]; if(vis[a.id] == 0) cnt++; vis[a.id] ++; que.push(a); if(cnt == n){ while(que.size()){ Node aa = que.front(); que.pop(); ans = min(ins[i].val - aa.val,ans); vis[aa.id]--; if(vis[aa.id] == 0){ cnt--; break; } } } } cout<<ans<<endl; return 0; }