#include<cstdio>#include<iostream>#include<vector>#include<queue>#define RI register int#define CI const int&usingnamespace std;
constint N=1005,dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
int t,n,m,vis[N*N]; char a[N][N]; vector <int> v[N*N]; queue <int> q;
inlineinttrs(CI x,CI y){
return (x-1)*m+y;
}
inlineinttrs2(CI a,CI b,CI c,CI d){
return (trs(a,b)-1)*n*m+trs(c,d);
}
inlinevoidlink(CI x_1,CI y_1,CI x_2,CI y_2){
for (RI i=0;i<4;++i)
{
int tx_1=x_1+dx[i],ty_1=y_1+dy[i];
if (tx_1<1||tx_1>n||ty_1<1||ty_1>m) continue;
if (a[tx_1][ty_1]=='O') continue;
int tx_2=x_2+dx[i],ty_2=y_2+dy[i];
if (tx_2<1||tx_2>n||ty_2<1||ty_2>m||a[tx_2][ty_2]=='O')
{
q.push(trs2(x_1,y_1,x_2,y_2)); vis[trs2(x_1,y_1,x_2,y_2)]=1; continue;
}
v[trs2(tx_1,ty_1,tx_2,ty_2)].push_back(trs2(x_1,y_1,x_2,y_2));
}
}
intmain(){
//freopen("A.in","r",stdin);for (scanf("%d",&t);t;--t)
{
RI x,y,i,j; for (scanf("%d%d",&n,&m),i=1;i<=n;++i) scanf("%s",a[i]+1);
q=queue <int>(); for (i=1;i<=n*n*m*m;++i) v[i].clear(),vis[i]=0;
int ans=0; for (x=1;x<=n;++x) for (y=1;y<=m;++y) if (a[x][y]=='.')
for (i=1;i<=n;++i) for (j=1;j<=m;++j)
if (a[i][j]=='.') if (x!=i||y!=j) link(x,y,i,j);
while (!q.empty())
{
int now=q.front(); q.pop();
for (auto to:v[now]) if (!vis[to]) vis[to]=1,q.push(to);
}
for (x=1;x<=n;++x) for (y=1;y<=m;++y) if (a[x][y]=='.')
{
bool flag=1; for (i=1;i<=n&&flag;++i) for (j=1;j<=m&&flag;++j)
if (a[i][j]=='.') if (x!=i||y!=j) if (vis[trs2(x,y,i,j)]==0) flag=0;
ans+=flag;
}
printf("%d\n",ans);
}
return0;
}
3|0B. Intersection over Union
到现在CF上也没人过的神之几何题,弃疗
4|0C. Primitive Root
什么原神根数论题,我题目都没看就被徐神秒了
(额好像和原根一点关系没有是个顶针位运算题)
#include<bits/stdc++.h>#include<functional>using llsi = longlongsignedint;
voidhkr(llsi p, llsi m, std::function<void(llsi, llsi)> callback){
llsi cur = 0;
for(int i = 62; i >= 0; --i) {
if(p >> i & 1) {
if(m >> i & 1) {
callback(cur | (1ll << i), cur | (1ll << i + 1) - 1);
} else {
cur |= 1ll << i;
}
} else {
if(m >> i & 1) {
callback(cur, cur | (1ll << i) - 1);
cur |= 1ll << i;
} else {
}
}
}
if((cur ^ p) <= m) callback(cur, cur);
return ;
}
intmain(){
// freopen("1.in", "r", stdin);int T; std::cin >> T; while(T--) {
llsi p, m, ans = 0;
std::cin >> p >> m;
hkr(p - 1, m, [&](llsi l, llsi r) {
// std::cerr << "l, r = " << l << ", " << r << char(10); l += p - 1; r += p - 1;
ans += r / p - (l - 1) / p;
});
std::cout << ans << char(10);
}
return0;
}
#include<cstdio>#include<iostream>#include<queue>#include<utility>#include<algorithm>#define int long long#define RI register int#define CI const int&#define fi first#define se secondusingnamespace std;
typedef pair <int,int> pi;
constint N=10005;
int n,W,k,suf[N],f[N],ans; pi p[N];
signedmain(){
RI i,j; for (scanf("%lld%lld%lld",&n,&W,&k),i=1;i<=n;++i)
scanf("%lld%lld",&p[i].fi,&p[i].se); sort(p+1,p+n+1);
priority_queue <int,vector <int>,greater <int>> hp;
for (i=n;i>=n-k+1;--i) suf[i]=suf[i+1]+p[i].se,hp.push(p[i].se);
for (i=n-k;i>=1;--i) hp.push(p[i].se),suf[i]=suf[i+1]+p[i].se-hp.top(),hp.pop();
for (ans=suf[1],i=1;i<=n;++i)
{
for (j=W;j>=p[i].fi;--j) f[j]=max(f[j],f[j-p[i].fi]+p[i].se);
for (j=0;j<=W;++j) ans=max(ans,f[j]+suf[i+1]);
}
returnprintf("%lld",ans),0;
}
9|0H. Puzzle: Question Mark
做不来,弃疗捏
10|0I. Counter
签到,祁神一眼秒了我就没管
#include<bits/stdc++.h>usingnamespace std;
using pii = pair<int, int>;
#define ft first#define sd secondconstint N = 1e5+5;
int t, n, m;
pii A[N];
signedmain(){
ios::sync_with_stdio(0); cin.tie(0);
cin >> t;
while (t--){
cin >> n >> m;
A[0]=make_pair(0, 0);
for (int i=1; i<=m; ++i) cin >> A[i].ft >> A[i].sd;
sort(A, A+m+1);
bool ok=true;
for (int i=1; i<=m; ++i){
if ((A[i].ft-A[i-1].ft==A[i].sd-A[i-1].sd) || A[i].ft-A[i].sd>A[i-1].ft) continue;
else{ok=false; break;}
}
cout << (ok ? "Yes\n" : "No\n");
}
return0;
}
#include<cstdio>#include<iostream>#define int long long#define RI register int#define CI const int&usingnamespace std;
constint N=100005;
int t,n,a[N],pre[N],suf[N],q,x,y,sum;
classSegment_Tree{
private:
structsegment {
int sum_pre,sum_suf,tag_pre,tag_suf;
int mx_pre,mn_pre,mx_suf,mn_suf,len;
inlinesegment(void){
sum_pre=sum_suf=tag_pre=tag_suf=0;
mx_pre=mn_pre=mx_suf=mn_suf=0;
}
}O[N<<2];
inlinevoidpushup(CI now){
O[now].sum_pre=O[now<<1].sum_pre+O[now<<1|1].sum_pre;
O[now].sum_suf=O[now<<1].sum_suf+O[now<<1|1].sum_suf;
O[now].mx_pre=O[now<<1|1].mx_pre;
O[now].mn_pre=O[now<<1].mn_pre;
O[now].mx_suf=O[now<<1].mx_suf;
O[now].mn_suf=O[now<<1|1].mn_suf;
}
inlinevoidapply_pre(CI now,CI mv){
O[now].sum_pre=O[now].len*mv;
O[now].tag_pre=O[now].mx_pre=O[now].mn_pre=mv;
}
inlinevoidapply_suf(CI now,CI mv){
O[now].sum_suf=O[now].len*mv;
O[now].tag_suf=O[now].mx_suf=O[now].mn_suf=mv;
}
inlinevoidpushdown(CI now){
if (O[now].tag_pre) apply_pre(now<<1,O[now].tag_pre),apply_pre(now<<1|1,O[now].tag_pre),O[now].tag_pre=0;
if (O[now].tag_suf) apply_suf(now<<1,O[now].tag_suf),apply_suf(now<<1|1,O[now].tag_suf),O[now].tag_suf=0;
}
public:
#define TN CI now=1,CI l=1,CI r=n#define LS now<<1,l,mid#define RS now<<1|1,mid+1,rinlinevoidbuild(TN){
O[now]=segment(); O[now].len=r-l+1;
if (l==r)
{
O[now].sum_pre=O[now].mx_pre=O[now].mn_pre=pre[l];
O[now].sum_suf=O[now].mx_suf=O[now].mn_suf=suf[l];
return;
}
int mid=l+r>>1; build(LS); build(RS); pushup(now);
}
inlinevoidassign_pre(CI beg,CI end,CI mv,TN){
if (beg>end) return;
if (beg<=l&&r<=end) returnapply_pre(now,mv); int mid=l+r>>1; pushdown(now);
if (beg<=mid) assign_pre(beg,end,mv,LS); if (end>mid) assign_pre(beg,end,mv,RS); pushup(now);
}
inlinevoidassign_suf(CI beg,CI end,CI mv,TN){
if (beg>end) return;
if (beg<=l&&r<=end) returnapply_suf(now,mv); int mid=l+r>>1; pushdown(now);
if (beg<=mid) assign_suf(beg,end,mv,LS); if (end>mid) assign_suf(beg,end,mv,RS); pushup(now);
}
inlineintquery_pre(CI beg,CI end,TN){
if (beg>end) return0;
if (beg<=l&&r<=end) return O[now].sum_pre; int mid=l+r>>1,ret=0; pushdown(now);
if (beg<=mid) ret+=query_pre(beg,end,LS); if (end>mid) ret+=query_pre(beg,end,RS); return ret;
}
inlineintquery_suf(CI beg,CI end,TN){
if (beg>end) return0;
if (beg<=l&&r<=end) return O[now].sum_suf; int mid=l+r>>1,ret=0; pushdown(now);
if (beg<=mid) ret+=query_suf(beg,end,LS); if (end>mid) ret+=query_suf(beg,end,RS); return ret;
}
inlineintfind_pre(CI pos,CI val,TN){
if (r<pos||O[now].mx_pre<val) return-1; if (l==r) return l; int mid=l+r>>1; pushdown(now);
int res=find_pre(pos,val,LS); if (res!=-1) return res; returnfind_pre(pos,val,RS);
}
inlineintfind_suf(CI pos,CI val,TN){
if (l>pos||O[now].mx_suf<val) return-1; if (l==r) return l; int mid=l+r>>1; pushdown(now);
int res=find_suf(pos,val,RS); if (res!=-1) return res; returnfind_suf(pos,val,LS);
}
inlineintfind_pos(TN){
if (O[now].mx_pre<O[now].mn_suf) return-1; if (l==r) return l; int mid=l+r>>1; pushdown(now);
int res=find_pos(LS); if (res!=-1) return res; returnfind_pos(RS);
}
#undef TN#undef LS#undef RS}SEG;
signedmain(){
//freopen("M.in","r",stdin);for (scanf("%lld",&t);t;--t)
{
RI i; int sum=0; for (scanf("%lld",&n),i=1;i<=n;++i) scanf("%lld",&a[i]),sum+=a[i];
for (pre[0]=0,i=1;i<=n;++i) pre[i]=max(pre[i-1],a[i]);
for (suf[n+1]=0,i=n;i>=1;--i) suf[i]=max(suf[i+1],a[i]);
for (SEG.build(),scanf("%lld",&q),i=1;i<=q;++i)
{
scanf("%lld%lld",&x,&y); sum-=a[x]; sum+=(a[x]+=y);
int R=SEG.find_pre(x,a[x]); SEG.assign_pre(x,R==-1?n:R-1,a[x]);
int L=SEG.find_suf(x,a[x]); SEG.assign_suf(L==-1?1:L+1,x,a[x]);
int pos=SEG.find_pos(); if (pos==-1) pos=n+1;
printf("%lld\n",SEG.query_pre(1,pos-1)+SEG.query_suf(pos,n)-sum);
}
}
return0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2023-03-09 Codeforces Round 856 (Div. 2)
2018-03-09 Luogu P1993 小 K 的农场