D. Rudolf and the Ball Game

题解:模拟+去重

每一次扔球都将所有可能性加入队列,并设为一层;然后将一层的可能性挨个出列并进行 ((qj+ri1) mod n+1),((qjri1+n) mod n+1)操作,然后去重后入列。

code

 

复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int a[N],b[1005];
int main(){
//    freopen("input.txt","r",stdin);
    int t;
    cin>>t;
    while (t--){
        int n,m,x;
        cin>>n>>m>>x;
        int r=0,l=0;
        a[r++]=x;
        for (int i=1;i<=m;i++){
            memset(b,0,sizeof(b));
            int ri,R=r;
            char c;
            cin>>ri>>c;
            while (l<R){
                int zero=(a[l]+ri-1)%n+1,one=(a[l]+n-ri-1)%n+1;
                if (c=='?') {
                    if (b[zero]==0){
                        a[r++]=zero;
                        b[zero]=1;
                    }
                    if (b[one]==0){
                        a[r++]=one;
                        b[one]=1;
                    }
                }
                if (c=='0')
                    if (b[zero]==0){
                        a[r++]=zero;
                        b[zero]=1;
                    }
                if (c=='1') 
                    if (b[one]==0){
                        a[r++]=one;
                        b[one]=1;
                    }
                l++;
            }
        }
        cout<<r-l<<endl;
        sort(a+l,a+r);
        cout<<a[l++];
        while (l<r) cout<<" "<<a[l++];
        cout<<endl;
    }
    return 0;
}
复制代码

 

posted @   黑屿白  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示