二次元音游人

这是一股照亮混沌的令和时代互联网的一道光,给在电子的海洋里冲浪的阿宅们带来笑容

codeforces 2218

次こそはですね私は

下次真的要结束了

Codeforces Round 1090 (Div. 4)

D. The 67th OEIS Problem 1039

image

\(p_i\) 表示第 \(i\) 个质数,然后令 \(a_i=p_i\times p_{i+1}\),这样的话 \(\text{gcd}(a_i,a_{i+1})=\text{gcd}(p_i\times p_{i+1},p_{i+1}\times p_{i+2})=p_{i+1}\)

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
const int N=1e6+5;
int prime[N];
bool vis[N];
inline void solve(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cout<<prime[i]*prime[i+1]<<' ';
    }
    cout<<'\n';
    
}
signed main(void){
    cin.tie(NULL)->sync_with_stdio(false);
    vis[1]=true;
    int cnt=0;
    prime[++cnt]=1;
    for(int i=2;i<=1000000;i++){
        if(vis[i]) continue;
        prime[++cnt]=i;
        for(int j=i;j<=1000000;j+=i){
            vis[j]=true;
        }
    }
    // cerr<<cnt<<endl;
    int T=1;
    cin>>T;
    while(T--){
        solve();
    }
    return 0;
}
/*
5
4 3 2 5 1

*/

E. The 67th XOR Problem 1242

image

设这次删除 \(a_i\),那么\(a_j=a_j \oplus a_i\),\(a_k=a_k \oplus a_i\),再删除 \(a_j\),会使得 \(a_k=a_k \oplus a_i \oplus a_j \oplus a_i=a_k \oplus a_j\),正好消掉中间项,所以可以 \(n^2\) 枚举 \(a_i \oplus a_j\) 最后一项来求出最大值。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,x;
const int N=1e5+5;
int a[N];
inline void solve(){
    cin>>n;
    int res=0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        res^=a[i];
    }
    int maxn=0;
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            maxn=max(maxn,a[i]^a[j]);
        }
    }
    cout<<maxn<<'\n';

}
signed main(void){
    cin.tie(NULL)->sync_with_stdio(false);
    int T=1;
    cin>>T;
    while(T--){
        solve();
    }
    return 0;
}
/*
5
4 3 2 5 1

*/

F. The 67th Tree Problem 1533

image

可以考虑构建一个菊花图,首先根节点的奇偶性是根据 \(x+y\) 来决定的。然后任意一个节点连到根节点上就是一个奇节点,在这个节点上再接一个就是一个奇节点一个偶节点。所以说一个偶节点必须有一个奇节点。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
const int N=3e5+5;
int x,y;
inline void solve(){
    cin>>x>>y;
    if(y==0||((x+y)%2==0&&!x)){
        cout<<"NO\n";
        return;
    }
    if((x+y)%2==1){
        y--;
    }
    else{
        x--;
    }
    if(x>y){
        cout<<"NO\n";
        return;
    }
    cout<<"YES\n";
    for(int i=1;i<=x;i++){//x个偶
        cout<<"1 "<<i+1<<"\n";
    }
    for(int i=1;i<=x;i++){//x个偶
        cout<<i+1<<" "<<i+x+1<<"\n";
    }
    for(int i=1;i<=y-x;i++){
        cout<<"1 "<<2*x+i+1<<"\n";
    }
    
}
signed main(void){
    cin.tie(NULL)->sync_with_stdio(false);
    int T=1;
    cin>>T;
    while(T--){
        solve();
    }
    return 0;
}
/*
5
4 3 2 5 1

*/

G. The 67th Iteration of "Counting is Fun" 1837

image

\(i\) 个人在时间 \(t\) 坐下有两个条件,一是已经有 \(a_i\) 个人在 \(t\) 之前坐下,二是 \(i-1\) 或者 \(i+1\) 中最早坐下的时间小于 \(t\) ,即 \(min(b_{i-1},b_{i+1})<t\)

对于第 \(i\) 个人,因为 \(b_i\) 是确定的,我们先找邻居的条件是否满足,\(min(b_{i-1},b_{i+1})\)

\(sum_i\) 表示到时间 \(i\) 有夺少人已经坐下。

  • 如果 \(min(b_{i-1},b_{i+1})= t-1\),说明第一个条件随时都可以满足,\(a_i\) 的取值范围是 \([1,sum_{t-1}]。\)

  • 如果 \(min(b_{i-1},b_{i+1})< t-1\),说明第一个条件必须得满足 \(sum_{t-1}\geq a_i > sum_{t-2}\)\(a_i\) 的取值范围是 \((sum_{t-2},sum_{t-1}]。\)

  • 如果 \(min(b_{i-1},b_{i+1})> t-1\),违反条件。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
const int N=3e5+5;
const int mod=676767677;
int b[N];
int cnt[N],sum[N];
inline void solve(){
    cin>>n>>m;
    for(int i=0;i<=max(n,m);i++){
        cnt[i]=sum[i]=0;
    }
    for(int i=1;i<=n;i++){
        cin>>b[i];
        cnt[b[i]]++;
    }
    sum[0]=cnt[0];
    for(int i=1;i<=m;i++){
        sum[i]=sum[i-1]+cnt[i];
        // cerr<<sum[i]<<" ";
    }
    // cerr<<endl;
    int ans=1;
    for(int i=1;i<=n;i++){
        if(b[i]==0) continue;
        int minn=LONG_LONG_MAX;
        if(i>1){
            minn=min(minn,b[i-1]);
        }
        if(i<=n-1){
            minn=min(minn,b[i+1]);
        }
        // cerr<<"???"<<minn<<endl;
        if(minn==b[i]-1){
            ans=ans*(sum[b[i]-1])%mod;
        }
        else if(minn<b[i]-1){
            int lst=0;
            if(b[i]-2>=0){
                lst=sum[b[i]-2];
            }
            else{
                lst=0;
            }
            ans=ans*(sum[b[i]-1]-lst)%mod;
        }
        else{
            cout<<0<<'\n';
            return;
        }
    }
    cout<<ans<<'\n';
}
signed main(void){
    cin.tie(NULL)->sync_with_stdio(false);
    int T=1;
    cin>>T;
    while(T--){
        solve();
    }
    return 0;
}
/*
5
4 3 2 5 1

*/

后日谈:

明天要考蓝桥杯了,但是我才发现我没报名,正在想怎么和队长说TvT

posted @ 2026-04-10 00:51  超绝最可爱天使酱  阅读(31)  评论(0)    收藏  举报