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;
}
再也不熬了!!!傻逼无头骑士,看了我两个晚上了,难顶,今天必须给他看完,明天开始背八股惹