LOADING

加载过慢请开启缓存,浏览器默认开启

每日3t

2023/3/15 daily

CF 733D

哈希题,把对应的最短边的信息哈希存一下即可

struct rec{
    int a,b,c;
};
using pii=pair<ll,ll>;
void solve(){
  int n;cin>>n;
  vector<rec>recs(n);
  map<pii,pii>mp;
  ll ans=-1,left=-1,right=-1,flag=false;
  for(int i=0;i<n;++i){
    vector<ll>sq(3);
    for(int i=0;i<3;++i){
        cin>>sq[i];
    }
    sort(sq.begin(),sq.end());
    if(sq[0]>ans){
        flag=false;
        ans=sq[0];
        left=i;
    }
    auto pr=make_pair(sq[1],sq[2]);
    if(mp.find(pr)==mp.end()){
        mp[pr]=make_pair(i,sq[0]);
        continue;
    }
    ll new_max=std::min({sq[2],sq[1],mp[pr].second+sq[0]});
    if(new_max>ans){
        ans=new_max;
        left=mp[pr].first;
        right=i;
        flag=true;
    }
    if(sq[0]>mp[pr].second){
        mp[pr].second=sq[0];
        mp[pr].first=i;
    }
  }
  if(!flag){
    cout<<1<<'\n';
    cout<<left+1;
  }else{
    cout<<2<<'\n';
    cout<<left+1<<' '<<right+1<<'\n';
  }
  return;
}

CF 739B

树上搜索+差分

void solve(){
  int n;cin>>n;
  vector<int>a(n);
  for(int i=0;i<n;++i)cin>>a[i];
  vector<vector<int>>E(n),cost(E);
  for(int i=1;i<n;++i){
    int p,w;cin>>p>>w;
    --p;
    E[i].push_back(p);
    E[p].push_back(i);
    cost[i].push_back(w);
    cost[p].push_back(w);
  }
  vector<int>ans(n),dis(n);
  vector<pii>que;
  function<void(int,int)>dfs=[&](int x,int f){
    ans[x]=1;
    int pos=lower_bound(que.begin(),que.end(),make_pair(dis[x]-a[x],0ll))-que.begin()-1;//find the previous 
    if(pos>=0){
        ans[que[pos].second]--;
    }
    que.push_back({dis[x],x});
    for(int i=0;i<E[x].size();++i){
        int v=E[x][i],c=cost[x][i];
        if(v==f)continue;
        dis[v]=dis[x]+c;
        dfs(v,x);
        ans[x]+=ans[v];
    }
    que.pop_back();
  };
  dfs(0,-1);
  for(int i=0;i<n;++i){
    cout<<ans[i]-1<<' ';
  }
  return;
}

CF 14C

简单逻辑题

void solve(){
  int x=0,y=0;
  map<pii,int>mp;
  for(int i=0;i<4;++i){
    int x1,y1,x2,y2;
    cin>>x1>>y1>>x2>>y2;
    x+=(y1==y2)&&(x1!=x2);
    y+=(x1==x2)&&(y1!=y2);
    mp[make_pair(x1,y1)]++;
    mp[make_pair(x2,y2)]++;
  }
  bool check=(x==2)&&(y==2);
  for(auto it:mp){
    if(it.second!=2){
      check=false;
    }
  }
  if(check){
    cout<<"YES\n";
  }else{
    cout<<"NO\n";
  }
  return;
}

再也不熬了!!!傻逼无头骑士,看了我两个晚上了,难顶,今天必须给他看完,明天开始背八股惹