挂分大场。光光要杀我。
今天的四个题题目名称都是 Arcaea 的梯子名字。放个参考。
Lost World 失落的世界(主线第一章背景)
Outer Reaches 谜域的界外(Memory Forest & Singularity 背景/故事 短篇 背景)
Spire of Convergence 聚合的塔尖(主线第四章/故事 主线背景)
Dormant Echoes 沉眠的回声(咲弥/故事 支线 背景)
Boundless Divide 无央的决裂(主线第五章/故事 主线 背景2)
Forgotten Construct 遗忘的构念(拉格兰 背景)
Horizon of Anamnesis 回首的天际(主线第六章/故事 主线 背景3)
Beyond 不要打(字面意思)
然而主线背景确实是没有 Testify 的。
失落的世界
很诡异。首先我们显然要让这个二分的 mid 左右横跳。具体怎么跳,可以先假设每次都向右跳,预处理出操作序列然后往回推。
暂且不知道为什么把 vector 放函数里边就过了。哦多测那没事了。
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <vector>
#include "world.h"
#define int long long
using namespace std;
int Guess(int n){
vector<int>v;
int l=1,r=n;
while(l<r){
int mid=(l+r)>>1;v.push_back(mid);l=mid+1;
}
reverse(v.begin(),v.end());
int x=1,od=1;
for(int x:v)x+=od*x,od=-od;
l=1;r=n;
while(l<r){
int mid=(l+r)>>1;
x+=od*mid,od*=-1;
if(Query(x))r=mid;
else l=mid+1;
}
return l;
}
谜域的界外
发现点的坐标是指数增长的,那可以预处理 1e18 内的所有点,\(O(n^2)\) 爆扫选哪一段就行了。
没开 int128 挂 50。6。
#include <cstdio>
#include <iostream>
#include <algorithm>
#define int long long
using namespace std;
int n,ans,ax,ay,bx,by,t,X,Y;
int x[110],y[110];
__int128 dis(__int128 x1,__int128 y1,__int128 x2,__int128 y2){
return (x2>x1?x2-x1:x1-x2)+(y2>y1?y2-y1:y1-y2);
}
signed main(){
scanf("%lld%lld%lld%lld%lld%lld%lld%lld%lld",&x[0],&y[0],&ax,&ay,&bx,&by,&X,&Y,&t);
for(n=1;;n++){
x[n]=ax*x[n-1]+bx;y[n]=ay*y[n-1]+by;
if(x[n]>=1e18||y[n]>=1e18)break;
}
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
if(min(dis(X,Y,x[i],y[i]),dis(X,Y,x[j],y[j]))+dis(x[i],y[i],x[j],y[j])<=t)ans=max(ans,j-i+1);
}
}
printf("%lld\n",ans);
return 0;
}
聚合的塔尖
不知道怎么想到根号分治的。
对于 \(k\) 小于根号的点,暴力跑出每个点距离最远的根号个点。对于大于根号的点,它们不超过根号个,暴力拓扑排序。
不过似乎预处理暴力一点也能过。我直接 sort 而且没去重过了,不需要火车头,就是慢点。然后阈值参考了 rk1 的那个调了 100。
#pragma GCC optimize(3)
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <cmath>
using namespace std;
const int sq=100;
int n,m,Q,ans=-1,dis[100010],a[100010];
bool vis[100010];
vector<int>g[100010];
vector<pair<int,int> >v[100010];
void tuopu(int st){
for(int i=1;i<st;i++)dis[i]=-0x3f3f3f3f;
dis[st]=0;
for(int x=st;x>=1;x--){
if(!vis[x])ans=max(ans,dis[x]);
for(int v:g[x])dis[v]=max(dis[v],dis[x]+1);
}
}
int main(){
scanf("%d%d%d",&n,&m,&Q);
for(int i=1;i<=m;i++){
int u,v;scanf("%d%d",&u,&v);g[v].push_back(u);
}
for(int i=1;i<=n;i++){
v[i].push_back(make_pair(0,i));
for(int x:g[i]){
for(pair<int,int>p:v[x])v[i].push_back(make_pair(p.first+1,p.second));
}
sort(v[i].begin(),v[i].end(),greater<pair<int,int> >());
while(v[i].size()>sq)v[i].pop_back();
}
while(Q--){
int st,k;scanf("%d%d",&st,&k);ans=-1;
for(int i=1;i<=k;i++)scanf("%d",&a[i]),vis[a[i]]=true;
for(pair<int,int>p:v[st]){
if(!vis[p.second]){
ans=p.first;break;
}
}
if(ans==-1)tuopu(st);
printf("%d\n",ans);
for(int i=1;i<=k;i++)vis[a[i]]=false;
}
return 0;
}
沉眠的回声
我知道我不知道我知道我不知道,但是我不知道我不知道我知道。
大概明白了《庄子与惠子游于濠梁之上》的用意。(完全没理解)
两张表情包:
感觉上边这张缺点什么。
先不会着。
标签:38,省选,dis,int,联测,ans,int128,include,lld% From: https://www.cnblogs.com/gtm1514/p/17148315.html