結果

問題 No.1899 L1 Cafe
ユーザー 蜜蜂蜜蜂
提出日時 2022-04-08 22:21:10
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 191 ms / 2,000 ms
コード長 1,936 bytes
コンパイル時間 1,594 ms
コンパイル使用メモリ 170,116 KB
実行使用メモリ 4,380 KB
最終ジャッジ日時 2023-08-19 00:50:33
合計ジャッジ時間 4,581 ms
ジャッジサーバーID
(参考情報)
judge10 / judge14
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,380 KB
testcase_01 AC 177 ms
4,376 KB
testcase_02 AC 173 ms
4,376 KB
testcase_03 AC 89 ms
4,376 KB
testcase_04 AC 115 ms
4,380 KB
testcase_05 AC 57 ms
4,376 KB
testcase_06 AC 191 ms
4,376 KB
testcase_07 AC 167 ms
4,376 KB
testcase_08 AC 171 ms
4,376 KB
testcase_09 AC 172 ms
4,376 KB
testcase_10 AC 179 ms
4,376 KB
testcase_11 AC 166 ms
4,376 KB
testcase_12 AC 179 ms
4,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

//g++ 1.cpp -std=c++14 -O2 -I .
#include <bits/stdc++.h>
using namespace std;

#include <atcoder/math>
#include <atcoder/modint>
using namespace atcoder;

using ll = long long;
using ld = long double;

using vi = vector<int>;
using vvi = vector<vi>;
using vll = vector<ll>;
using vvll = vector<vll>;
using vld = vector<ld>;
using vvld = vector<vld>;
using vst = vector<string>;
using vvst = vector<vst>;

#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define pq_big(T) priority_queue<T,vector<T>,less<T>>
#define pq_small(T) priority_queue<T,vector<T>,greater<T>>
#define all(a) a.begin(),a.end()
#define rep(i,start,end) for(ll i=start;i<(ll)(end);i++)
#define per(i,start,end) for(ll i=start;i>=(ll)(end);i--)
#define uniq(a) sort(all(a));a.erase(unique(all(a)),a.end())

void solve(){
  ll n,a,b;
  cin>>n>>a>>b;

  ll ans=(n*(n-1))/2;
  if(a==1||b==1){
    cout<<ans<<endl;
    return;
  }

  ans-=floor_sum(n,1,-1,n)-floor_sum(1,1,-1,n);
  ans+=floor_sum(n,b,-1,n)-floor_sum(1,b,-1,n);

  ll z=(n-1)/a;

  ans-=floor_sum(z+1,b,-a,n)-floor_sum(1,b,-a,n);
  ans+=floor_sum(z+1,1,-a,n)-floor_sum(1,1,-a,n);

  cout<<ans<<endl;
}

int main(){
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int t;
  cin>>t;

  while(t--){
    solve();
  }
}

/*
x,y>=1かつ2<=x+y<=Nの数は簡単
-> x,y>=0かつ0<=x+y<=N-2とみなせるので (1+2+...+N-1)=1/2*N*(N-1)

ここから不適を消したい
(x,y)が違反としてx=pと決め打つ
この時p%A!=0かつy%B!=0だとやばい
とりあえずp%A!=0を無視してy%B!=0となるyの数は
N-p - (N-p)/B個

で1<=p<=N-1についてこれを足し合わしたくて、N-pの合計は簡単、(N-p)/Bの合計はfloor_sumでいける

ここで p%A==0だけど引いちゃった分を回収したい
1<=p<=N-1 かつ p%A==0 で (N-p)/B の合計
N-1/A(切り捨て)=Zとして1<=q<=Zで (N-Aq)/B

N-pの合計 1<=q<=Zで (N-Aq)/1とみなせて
*/
0