在线剪切板

缺省源

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

ll read() {
    ll ret=0,f=1;
    char ch;
    ch=getchar();
    while(ch<'0'||ch>'9') {
        if(ch=='-') f=-1;
        ch=getchar();
    }
    
    while(ch>='0'&&ch<='9') {
        ret=ret*10+(ch-'0');
        ch=getchar();
    }
    
    return ret*f;
}

ll fpow(ll a,ll b,ll mod) {
    ll ret=1;
    while(b) {
        if(b&1) {
            ret*=a;
            ret%=mod;
        }
        a*=a;
        a%=mod;
        b>>=1;
    }
    return ret;
}

int main() {
    
    return 0;
}

2026.10.19

在线C++IDE

2026年10月20日

# 任务2
q={
    '李冰': ['战国秦国官员', '任职蜀郡郡守', '在岷江流域开展水利工程建设', '修建大型防洪灌溉水利工程', '主持修建都江堰'], 
    '秦始皇': ['秦朝开国君主', '结束长期分裂局面完成全国统一', '确立中央集权官僚制度', '推行统一文字货币度量衡', '修筑万里长城'], 
    '司马迁': ['西汉文人官员', '出身史学世家', '遭受过宫刑屈辱', '耗费多年编撰史学巨著', '创作我国第一部纪传体通史《史记》'],
    '张成勇': ['高一17班班主任', '名师工作室室长', '语文老师', '长得像丘成桐', '男性']
}
for guess in q.keys():
    print('新题目')
    for  x in range(5):
        print('线索', x , q[guess][x])
        a=input('你猜的是:')
        if guess==a:
            print('答对了')
            break
        else:
            print('答错了')
    print('答案是:',guess)
# 任务三

q={
    '李冰': ['战国秦国官员', '任职蜀郡郡守', '在岷江流域开展水利工程建设', '修建大型防洪灌溉水利工程', '主持修建都江堰'], 
    '秦始皇': ['秦朝开国君主', '结束长期分裂局面完成全国统一', '确立中央集权官僚制度', '推行统一文字货币度量衡', '修筑万里长城'], 
    '司马迁': ['西汉文人官员', '出身史学世家', '遭受过宫刑屈辱', '耗费多年编撰史学巨著', '创作我国第一部纪传体通史《史记》'],
    '张成勇': ['高一17班班主任', '名师工作室室长', '语文老师', '长得像丘成桐', '男性']
}
score=0
for guess in q.keys():
    print('新题目')
    cnt=5
    for  x in range(5):
        print('线索', x , q[guess][x])
        cnt=cnt-1
        a=input('你猜的是:')
        if guess==a:
            print('答对了')
            break
        else:
            print('答错了')
        print('答案是:',guess)
        score=score+cnt
print("最终得分是",score)

# 任务四

q={
    '李冰': ['战国秦国官员', '任职蜀郡郡守', '在岷江流域开展水利工程建设', '修建大型防洪灌溉水利工程', '主持修建都江堰'], 
    '秦始皇': ['秦朝开国君主', '结束长期分裂局面完成全国统一', '确立中央集权官僚制度', '推行统一文字货币度量衡', '修筑万里长城'], 
    '司马迁': ['西汉文人官员', '出身史学世家', '遭受过宫刑屈辱', '耗费多年编撰史学巨著', '创作我国第一部纪传体通史《史记》'],
    '张成勇': ['高一17班班主任', '名师工作室室长', '语文老师', '长得像丘成桐', '男性']
}
score=0
qui=False
for guess in q.keys():
    print('新题目')
    cnt=5
    for  x in range(5):
        print('线索', x , q[guess][x])
        cnt=cnt-1
        a=input('你猜的是:')
        if guess==a:
            print('答对了')
            break
        else:
            if a=="quit":
                qui=True
                break
            else:
                print('答错了')
    if qui==True:
        print('提前退出')    
        break
    else:
        print('答案是:',guess)
        score=score+cnt
print("最终得分是",score)

ABC480E
image

P4683 [IOI 2008] Type Printer

ABC480G
image

2026年10月27日

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

ll read() {
    ll ret=0,f=1;
    char ch;
    ch=getchar();
    while(ch<'0'||ch>'9') {
        if(ch=='-') {
            f=-1;
        }
        ch=getchar();
    }
    
    while(ch>='0'&&ch<='9') {
        ret=ret*10+(ch-'0');
        ch=getchar();
    }
    
    return ret*f;
}

ll fpow(ll a,ll b,ll mod) {
    ll ret=1;
    while(b) {
        if(b&1) {
            ret*=a;
            ret%=mod;
        }
        a*=a;
        a%=mod;
        b>>=1;
    }
    return ret;
}

struct Edge{
    ll v,nxt;
};

const ll maxn=5e4+5;
Edge e[maxn<<5];
ll a[maxn],b[maxn];
bool tag[maxn];
ll c[maxn],cnt[maxn],head[maxn]; //color 
vector<ll> pos[maxn];
ll n,ecur;

void add_edge(ll u,ll v) {
    ++ecur;
    e[ecur]={v,head[u]};
    head[u]=ecur;
    return;
}

//将颜色u染色为c 并返回代价
ll full(ll u,ll col) {
	if(c[u]) {
		if(c[u]==col) {
			return 0;
		}else{
			return 0;
		}
	}
	ll ret=0;
	c[u]=col;
	if((c[u]>n&&col==1)||(c[u]<=n&&col==2)) {
		++ret;
	}
	for(ll i=head[u];i;i=e[i].nxt) {
		ll v=e[i].v;
		ll tmp=full(v,col==1?2:1);
		if(tmp==-1) {
			return -1;
		}
		ret+=tmp;
		
	}
	return ret;
}

void add_tag(ll u) {
	if(tag[u]) {
		return;
	}
	for(ll i=head[u];i;i=e[i].nxt) {
		ll v=e[i].v;
		add_tag(v);
	}
	return;
}

int main() {
    n=read();
    
    for(ll i=1;i<=n;++i) {
        a[i]=read();
        ++cnt[a[i]];
        pos[a[i]].push_back(i);
    }
    
    for(ll i=1;i<=n;++i) {
        b[i]=read();
        pos[b[i]].push_back(i+n);
    }     
    
    //开始建立图
    //先确定图合法
    for(ll i=1;i<=n;++i) {
        if(cnt[i]!=2) {
            puts("-1");
            return 0;
        }
    }
    
    //开始建立图
    //建图按照位置建
	for(ll i=1;i<=n;++i)     {
		add_edge(i,i+n);
		add_edge(i+n,i);
	}
	
	//建图按照值建立
	for(ll i=1;i<=n;++i) {
		add_edge(pos[i][0],pos[i][1]);
		add_edge(pos[i][1],pos[i][0]);
	}
	
	//我们开始建立图
	
	
	
		
        
	
	
	
    return 0;
}

2026年11月2日

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

ll read() {
    ll ret=0,f=1;
    char ch;
    ch=getchar();
    while(ch<'0'||ch>'9') {
        if(ch=='-') {
            f=-1;
        }
        ch=getchar();
    }
    
    while(ch>='0'&&ch<='9') {
        ret=ret*10+(ch-'0');
        ch=getchar();
    }
    
    return ret*f;
}

ll fpow(ll a,ll b,ll mod) {
    ll ret=1;
    while(b) {
        if(b&1) {
            ret*=a;
            ret%=mod;
        }
        a*=a;
        a%=mod;
        b>>=1;
    }
    return ret;
}

const ll maxn=2e6+5;
ll dp[maxn],f[maxn];
ll a[maxn];
ll n,d,c,t;

ll pre(ll x) {
    ll ret=1;
    for(ll l=1,r=x;l<=r;) {
        ll mid=(l+r)>>1;
        if(a[x]-a[mid]<=d) {
            ret=mid;
            r=mid-1;
        }else{
            l=mid+1;
        }
    }
    return ret;
}

ll nxt(ll x) {
    ll ret=1;
    for(ll l=x,r=n;l<=r;) {
        ll mid=(l+r)>>1;
        if(a[mid]-a[x]<=d) {
            ret=mid;
            l=mid+1;
        }else{
            r=mid-1;
        }
    }
    return ret;
}

void work() {
    n=read();
    d=read();
    fill(a+1,a+1+n,0);
    fill(dp+1,dp+1+n,0);
    fill(f+1,f+1+n,0);
    
    
    for(ll i=1;i<=n;++i) {
        a[i]=read();
    }
    
    //我们预处理dp和f
    dp[1]=1;
    for(ll i=2;i<=n;++i) {
        dp[i]=1;
        //往前找
        ll tmp=pre[i];
        if(nxt(tmp)==i) {
            dp[i]+=dp[tmp];
        }
    }
    
    f[n]=1;
    for(ll i=n-1;i>=1;i--) {
        dp[i]=1;
        ll tmp=nxt[i];
        if(pre(tmp)==i) {
            f[i]+=f[tmp];
        }
    }
    
    //然后我们求解
    for(ll i=1;i+1<=n;++i) {
        //从i和i+1是不同的位置
        ll x,y;
        x=pre(i+1);
        y=nxt(i);
        if(nxt(i+1)!=y || pre(i)!=x) {
            //这个点对不会成为中间点对
            continue;
        }
        ans+=dp[x]*f[y];
    }
    
    printf("%lld\n",ans);
    return;
}

int main() {
    c=read();
    t=read();
    
    while(t--) {
        work();
    }
    return 0;
}
#include <bits/stdc++.h>

#define ls(x) ((x)<<1)
#define rs(x) ((x)<<1|1)

using namespace std;

typedef long long ll;

ll read() {
    ll ret=0,f=1;
    char ch;
    ch=getchar();
    while(ch<'0'||ch>'9') {
        if(ch=='-') f=-1;
        ch=getchar();
    }
    
    while(ch>='0'&&ch<='9') {
        ret=ret*10+(ch-'0');
        ch=getchar();
    }
    
    return ret*f;
}

ll fpow(ll a,ll b,ll mod) {
    ll ret=1;
    while(b) {
        if(b&1) {
            ret*=a;
            ret%=mod;
        }
        a*=a;
        a%=mod;
        b>>=1;
    }
    return ret;
}

struct robot{
	ll x,d;
};

const ll inf=1e18;
const ll maxn=2e5+5;
ll dp[maxn];
ll seg[maxn<<2];
robot a[maxn];
ll nxt[maxn];
ll n;

ll ask(ll p,ll l,ll r,ll x,ll y) {
	if(x<=l&&r<=y) {
		return seg[p];
	}
	ll mid=(l+r)>>1;
	ll ret=0;
	if(x<=mid) {
		ret=ask(ls(p),l,mid,x,y);
	}
	if(y>mid) {
		ret=max(ret,ask(rs(p),mid+1,r,x,y));
	}
	return ret;
}

void chg(ll p,ll l,ll r,ll x,ll y) {
	if(l==r) {
		seg[p]=y;
		return;
	}
	ll mid=(l+r)>>1;
	if(x<=mid) {
		chg(ls(p),l,mid,x,y);
	}else{
		chg(rs(p),mid+1,r,x,y);
	}
	seg[p]=max(seg[ls(p)],seg[rs(p)]);
	return;
}

int main() {
    n=read();
    
    for(ll i=1;i<=n;++i) {
		a[i].x=read();
		a[i].d=read();
	}
    
    sort(a+1,a+1+n,[](const robot &a,const robot &b){return a.x<b.x;});
    
    for(ll i=n;i>=1;i--) {
		//我们二分法知道他最多跳到那里
		ll tmp=i;
		for(ll l=i,r=n;l<=r;) {
			ll mid=(l+r)>>1;
			if(a[i].x+a[i].d>a[mid].x) {
				tmp=mid;
				l=mid+1;
			}else{
				r=mid-1;
			}
		}
		if(tmp==i) {
			nxt[i]=i;
		}else{
			nxt[i]=ask(1,1,n,i+1,tmp);
		}
		chg(1,1,n,i,nxt[i]);
	}
	
	dp[n+1]=1;
	for(ll i=n;i>=1;i--) {
		dp[i]=dp[i+1]+dp[nxt[i]+1];
	}
	printf("%lld\n",dp[1]);
    
    
    return 0;
}

posted @ 2026-10-19 00:27  txp2025  阅读(21)  评论(0)    收藏  举报