QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#770471#9597. Grade 2AlucardWA 292ms100440kbC++1410.3kb2024-11-21 22:00:562024-11-21 22:00:57

Judging History

你现在查看的是最新测评结果

  • [2024-11-21 22:00:57]
  • 评测
  • 测评结果:WA
  • 用时:292ms
  • 内存:100440kb
  • [2024-11-21 22:00:56]
  • 提交

answer

#include <bits/stdc++.h>
#include <iostream>

using namespace std;

typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int, int> PII;
typedef pair<ll, ll> PLL;
#define i128 _int128
#define fi first
#define se second
#define pb push_back
#define endl '\n'
#define int long long

const ll INF = 0x3f3f3f3f;
const int N = 4e6 + 9, M = 1e9 + 9;
const ll mod = 998244353;

int read()
{
    int s = 0, w = 1;
    char c = getchar();
    while (!isdigit(c))
        (c == '-') ? w = -1 : w = 1, c = getchar();
    while (isdigit(c))
        s = (s << 1) + (s << 3) + (c ^ 48), c = getchar();
    return s * w;
}

int qpow(int a, int b)
{
    a %= mod;
    int res = 1;
    while (b)
    {
        if (b & 1)
        {
            res = (res * a) % mod;
        }
        a = (a * a) % mod;
        b >>= 1;
    }
    return res % mod;
}

int gcd(int a, int b)
{
    if (b == 0)
        return a;
    else
        return gcd(b, a % b);
}

// int inverse(int a){
//     a%=mod;
// 	return qpow(fac[a%mod],mod-2)%mod;
// }

// int C(int n,int r){
//     n%=mod,r%=mod;
//     if(r>n)return 0;
//     return ((fac[n%mod]*inverse(r))%mod*inverse(n-r))%mod;
// }

// int Lucas(int n,int r){
//     if(r==0)return 1;
//     return C(n%mod,r%mod)%mod*Lucas(n/mod,r/mod)%mod;
// }

int x, n, mini_sum, l, r, ans;
map<int, int> res;
int prefix[N];

void solve()
{
    cin >> x >> n;
    int p = 1;
    ans = 0;
    memset(prefix, 0, sizeof(prefix));
    while (p < x)
        p *= 2;
    int fid = 0, lid = 0;
    for (int i = 1; i <= p; ++i)
    {
        if (gcd(((i * x) ^ x), x) == 1)
        {
            // cout<<i<<endl;
            res[i] = 1;
            mini_sum++;
            if (fid == 0)
                fid = i;
            lid = i;
        }
        prefix[i] = prefix[i - 1] + res[i];
    }
    // for(int i=1;i<=p;++i){
    //     cout<<i<<'-'<<prefix[i]<<endl;
    // }
    // cout<<fid<<' '<<lid<<endl;
    while (n--)
    {
        cin >> l >> r;
        if (!x & 1)
            ans = 0;
        else
        {
            ans = prefix[r % p] - prefix[l % p - 1] + mini_sum * ((r - l) / p);
            // if(r%p!=lid)r=r-r%p;
            // if(l%p!=fid)l+=p-l%p;
            // caseout<<l<<' '<<r;
            // if(l<r)ans+=mini_sum;
            if (l - l % p + 2*p <= r)ans += mini_sum;
            cout << ans << endl;
        }
    }
}

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int _ = 1;
    // fac[0]=1;
    // for(int i=1;i<=N-9;++i)fac[i]=(fac[i-1]*i)%mod;
    // cin>>_;

    while (_--)
        solve();

    return 0;
}

// 二进制优化多重背包、01、完全背包的混合背包问题
//  void ZeroOnePackage(int i){
//      for(int j=t;j>=w[i];--j){
//          dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
//      }
//      return;
//  }

// void FullPackage(int i){
//     for(int j=w[i];j<=t;++j){
//         dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
//     }
//     return;
// }

// void MuLtiPackage(int i){
//     memcpy(g,dp,sizeof(g));
//     int q[N];
//     for(int j=0;j<w[i];++j){
//         int head=0,tail=-1;
//         for(int k=j;k<=t;k+=w[i]){
//             while(head<=tail&&(k-q[head])/w[i]>c[i])head++;
//             while(head<=tail&&(k-q[tail])/w[i]*v[i]+g[q[tail]]<=g[k])tail--;
//             q[++tail]=k;
//             dp[k]=g[q[head]]+(k-q[head])/w[i]*v[i];
//         }
//     }
//     return;
// }

// void solve(){
// 	s11=read();s12=read();s21=read();s22=read();
//     t=s21*60+s22-s11*60-s12;
//     n=read();
//     for(int i=1;i<=n;++i){w[i]=read();v[i]=read();c[i]=read();}
//     for(int i=1;i<=n;++i){
//         if(c[i]==0)FullPackage(i);
//         if(c[i]==1)ZeroOnePackage(i);
//         if(c[i]>=2)MuLtiPackage(i);
//     }
//     cout<<dp[t]<<endl;

// }

// 牛客多校第8场 A题 枚举数字的倍数求gcd
//  void solve(){
//      int n;cin>>n;int cnt=0;
//      vector<int> vis(N+1);
//      for(int i=0;i<n;++i){
//          int a;cin>>a;
//          vis[a]=1;
//      }
//      for(int i=1;i<=N;++i){
//          int d=0;
//          for(int j=i;j<=N;j+=i){//枚举倍数
//              if(vis[j])d=gcd(d,j);
//          }
//          if(d==i && !vis[d])cnt+=1;//当i所有倍数的gcd就是i,且数列无i,则i可被添加
//      }
//      if(cnt&1)cout<<"dXqwq"<<endl;
//      else cout<<"Haitang"<<endl;
//  }

// P1827 USACO3.4 根据前序和中序求出后序
//  void changePost(string pre,string in){
//      if(pre.empty())return;
//      char root=pre[0];
//      int pos=in.find(root);
//      pre.erase(pre.begin());

//     string lp=pre.substr(0,pos);string rp=pre.substr(pos);
//     string lin=in.substr(0,pos);string rin=in.substr(pos+1);

//     changePost(lp,lin);changePost(rp,rin);
//     cout<<root;
// }

// P3370字符串无错哈希//该题解内还有多重哈希和字典树讲解
//  #include <bits/stdc++.h>
//  using namespace std;

// typedef long long ll;
// typedef long double ld;
// typedef unsigned long long ull;

// #define endl '\n'
// const ull mod=2024080620050421;
// const ull prime=233317;

// ull base=131;
// ull a[10010];
// char s[10010];
// int n,ans=1;

// ull hashe(char s[]){
//     int len=strlen(s);
//     ull res=0;
//     for(int i=0;i<len;++i)res=(res*base+(ull)s[i])%mod+prime;
//         return res;
// }

// void solve(){
//     memset(a,0,sizeof(a));memset(s,' ',sizeof(s));
//     cin>>n;
//     for(int i=1;i<=n;++i){
//         cin>>s;a[i]=hashe(s);
//     }
//     sort(a+1,a+n+1);
//     for(int i=1;i<n;++i){
//         if(a[i]!=a[i+1])ans++;
//     }
//     cout<<ans<<endl;
// }

// int main(){
//     ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);

//     int _=1;
//     //cin>>_;
//     while(_--)solve();

//     return 0;
// }

// 牛客多校第六场A题(dfs、树状dp、树状数组)
//  #include<bits/stdc++.h>
//  #define ll long long
//  using namespace std;

// const int maxn=210000;

// vector<pair<int,int> > V[maxn];//树的邻接链表
// int n;
// int p[maxn][2];
// //p[i][0]和p[i][1]分别表示以节点i为根的子树中,所有从i到其叶子节点的路径上0和1的总数
// int dep[maxn];//;dep存储每个节点的深度。
// double f[ maxn];//f[i]用来存储前缀串中0出现过的最大比例
// double g[maxn];

// void dfs(const int x,const int fa){
// 	if(x!=1){
// 		f[x]=max(f[x],(double)p[x][0]/(p[x][0]+p[x][1]));
// 		//每次更新当前节点的前缀串中0出现过的最大比例
// 		//例如,在1->3的路径上,前缀串中0的比例为1,则之后从3起的路径上,f都为1
// 	}
// 	else f[x]=0;

// 	for(auto [y,c]:V[x])if(y!=fa){//对当前节点的子节点进行操作
// 		//y是子节点,c是边上权值
// 		p[y][0]=p[x][0],p[y][1]=p[x][1];p[y][c]++;
// 		//继承父节点的路径,构造前缀01串
// 		dep[y]=dep[x]+1;

// 		f[y]=f[x];
// 		//继承父节点前缀串中0的比例

// 		dfs(y,x);
// 	}
// }
// //dfs后,整个树上每个节点都计算了该路径中0出现过的最大比例f

// void dp(const int x,const int fa){
// 	int sz=0;
// 	if(dep[x]&1) g[x]=1;
// 	else g[x]=0;

// 	for(auto [y,c]:V[x]) if(y!=fa){
// 		dp(y,x);
// //dp执行至叶节点后返回至叶节点的父节点,叶节点高度计1
// //递归至叶节点的过程中将奇数层节点的g置为1,偶数层置为0,方便之后对两人分别取最小/最大值
// 		sz++;//高度更新
// 		if(dep[x]&1)//Grammy
// 		{
// 			g[x]= min(g[x],g[y]);
// 		}
// 		else//Oscar
// 		{
// 			g[x]= max(g[x],g[y]);
// 		}
// //从叶节点的父节点返回至根节点的过程中,更新g[x]的值:
// //奇数层Grammy:x子节点中和其本身中的最小值
// //偶数层Oscar:x子节点中和其本身中的最大值
// 	}
// 	if(sz==0){
// 		g[x]=f[x];
// 	}
// //递归至叶节点后将g置为其f的值,开始执行返回到根节点的过程
// }

// int main(){
// 	ios_base::sync_with_stdio(0);

// 	int Tcase; cin>>Tcase;
// 	while(Tcase--){
// 		cin>>n;
// 		for(int i=1;i<=n;i++){
// 			vector<pair<int,int> >_;
// 			V[i].swap(_);//清空V向量
// 		}
// 		for(int i=1;i<n;i++){
// 			int x,y,c;cin>>x>>y>>c;
// 			V[x].emplace_back(y,c);
// 			V[y].emplace_back(x,c);
// 		}//构建邻接链表
// 		dep[1]=1;p[1][0]=p[1][1]=0;//重设根节点属性
// 		f[1]=0;dfs(1,0);
// 		dp(1,0);
// 		cout<<fixed<<setprecision(12)<<1-g[1]<<endl;

// 	}

// 	return 0;
// }

// 牛客多校第二场C题(dp)//看不懂它状态转移的原理
//  #include <bits/stdc++.h>
//  typedef long long ll;
//  using namespace std;
//  const ll MAXN=1e6+9;
//  int main() {
//      ios::sync_with_stdio(false);cin.tie(nullptr);

//     int n;cin>>n;vector<string> a(2);
//     for(auto &s:a){cin>>s;}
//     vector dp(2,vector(n,vector(2, 0)));
//     //vector<vector<vector<int>>> dp(2, vector<vector<int>>(n, vector<int>(2, 0)));
//     for(int j=0;j<n;j++){
//         for(int i=0;i<2;i++){
//             if(a[i][j]=='R'){
//                 dp[i][j][0]=1;
//             }
//         }
//     }
//     // dp[i][j][0]表示从左边出发,到达j时,步数的最大值
//     // dp[i][j][1]表示从右边出发,到达j时,步数的最大值
//     for(int j=0;j<n;j++){
//         for(int i=0;i<2;i++){
//             if(a[i][j]=='R'&&j>0){//从左边出发
//                 dp[i][j][0]+=max(dp[i][j-1][0],dp[i][j-1][1]);
//             }
//         }
//         for(int i=0;i<2;i++){
//             if(a[i][j]=='R'){//从右边出发
//                 dp[i][j][1]=dp[i^1][j][0]+1;
//     //^1 操作是用来切换玩家的,即 i ^ 1 将会得到另一个玩家的索引(0 或 1)
//             }
//         }
//     }

//     int ans=0;
//     for(int i=0;i<2;i++){
//         for(int j=0;j<n;j++) {
//             for(int k=0;k<2;k++) {
//                 ans=max(ans, dp[i][j][k]);
//             }
//         }
//     }

//     cout<<max(0,ans-1)<<endl;

//     return 0;
// }

// a,b互质,则其最大不能表示出的数是ab-a-b;
//  牛客竞赛语法入门班顺序结构习题1047
//  signed main(){
//  	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);

//   int n,m;cin>>n>>m;
//   cout<<n*m-n-m;

//   return 0;
// }

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 34908kb

input:

15 2
1 4
11 4514

output:

2
2252

result:

ok 2 lines

Test #2:

score: 0
Accepted
time: 148ms
memory: 67588kb

input:

500696 100000
110442401300 646889080214
337192 670162015551
508011001649 508011014425
94418501628 94418501634
824168677375 824168677376
732815842309 795402573302
353241304050 846773277757
622033633276 622033633284
760381702139 760381702143
207714 795408271057
382792 952061527685
686173 331215904334
...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
...

result:

ok 100000 lines

Test #3:

score: 0
Accepted
time: 159ms
memory: 67612kb

input:

465262 100000
119442423888 249533375982
528365238401 528365275157
654839906300 654839906303
135820863700 135820967840
336231 918143221477
568175915485 568176067832
993015103483 993015103488
951474 444595379179
298623434750 298623434751
257961 410491919396
996297715292 996297994388
17765498878 177654...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
...

result:

ok 100000 lines

Test #4:

score: 0
Accepted
time: 292ms
memory: 100440kb

input:

599394 100000
683408 868635908987
347999512025 347999739145
740945 377178907084
399211757563 399211757568
766968 548821086083
630762 702128377806
756554924031 756554924036
904713771313 904714518208
17026878789 17027129255
11601638470 206412869961
253365321722 253365321730
785476956554 785477402085
2...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
...

result:

ok 100000 lines

Test #5:

score: -100
Wrong Answer
time: 86ms
memory: 51228kb

input:

255255 100000
693776785134 693776920782
174578728959 174578728960
109045569231 631173362385
470661333171 470661439492
401883 183360880923
436203696728 436203931780
165055 339075075373
640081 299360395352
864237441330 864237509663
730335563579 730335652091
194265481215 194265481219
40664920117 406649...

output:

48406
-93439
186110004314
37959
65357983202
83815
120861755795
106705381500
24327
31556
-93438
13697
28081
260202286586
52511483770
-93436
46174552515
-93437
175347987986
-93438
47909
258154440479
327427451241
-93438
22468
54932
46381156133
45666395123
94552966563
55243
-93438
152255013998
-93438
10...

result:

wrong answer 2nd lines differ - expected: '1', found: '-93439'