P10786 [NOI2024] 百万富翁

打印 上一主题 下一主题

主题 840|帖子 840|积分 2520

思路:

先考虑 Sub1 的部门分,暴力算法:
<blockquote>
暴力询问所有 \(i=mod)?(x+y-mod)x+y)#define lowbit(x) x&(-x)#define pi pair#define pii pair#define iip pair#define ppii pair#define fi first#define se second#define full(l,r,x) for(auto it=l;it!=r;it++) (*it)=x#define Full(a) memset(a,0,sizeof(a))#define open(s1,s2) freopen(s1,"r",stdin),freopen(s2,"w",stdout);#define For(i,l,r) for(int i=l;i=l;i--)using namespace std;typedef double db;typedef unsigned long long ull;typedef long long ll;const int maxn=1e6+10;std::vector ask(std::vector a, std::vector b);int n;vector a,b,h;namespace Sub1{    int cnt=0;    int work(){            a.clear(),b.clear();            cnt=0;        vector l(n,0),r(n,0);        For(i,0,n-1){            l=cnt;            For(j,i+1,n-1){                a.push_back(i);                b.push_back(j);                ++cnt;            }            r=cnt-1;        }        h=ask(a,b);        For(i,0,n-1){            bool F=1;            For(j,l,r){                if(h[j]!=i){                    F=0;                    break;                }            }            if(F)              return i;        }        return 0;    }};namespace Sub2{        int cnt=0;        int s[maxn];        vector E[maxn];        stack S;        int p[]={1000000,500000,250000,125000,62498,20832,3472,183,1};        void solve(int x){                s[x]=a.size();                int n=E[x].size();        For(i,0,n-1){            For(j,i+1,n-1){                a.push_back(E[x]);                b.push_back(E[x][j]);            }        }        }        int get(int x){                int g=s[x],n=E[x].size();                For(i,0,n-1){                        bool F=1;                        For(j,i+1,n-1)                          if(h[g++]!=E[x])                                F=0;                        if(F)                          return E[x];                }                return 0;        }        void get(int X,int Y){                cnt=0;                int l=0,cnt=0,g=0,B=X/Y;                For(i,1,Y)                  E.clear();                while(!S.empty()){                        ++l;                        int x=S.top();                        S.pop();                        if((l-1)/B+1!=cnt)                          ++cnt;                        if(cnt
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

涛声依旧在

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表