結果
問題 | No.1651 Removing Cards |
ユーザー |
![]() |
提出日時 | 2021-08-20 23:03:52 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,036 bytes |
コンパイル時間 | 1,621 ms |
コンパイル使用メモリ | 171,036 KB |
実行使用メモリ | 9,448 KB |
最終ジャッジ日時 | 2024-10-14 06:22:25 |
合計ジャッジ時間 | 12,326 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 WA * 1 |
other | AC * 23 WA * 9 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define ll long long#define rep(i,n) for(int i=0;i<n;i++)#define Pr pair<ll,ll>#define Tp tuple<int,int,int>#define riano_ std::ios::sync_with_stdio(false);std::cin.tie(nullptr);typedef modint<mod> mintusing Graph = vector<vector<int>>;const ll mod = 1000000007;template<uint64_t mod>struct modint{uint64_t val;constexpr modint(const int64_t val_=0) noexcept:val((val_%int64_t(mod)+int64_t(mod))%int64_t(mod)){}constexpr modint operator-() const noexcept{return modint(*this)=mod-val;}constexpr modint operator+(const modint rhs) const noexcept{return modint(*this)+=rhs;}constexpr modint operator-(const modint rhs) const noexcept{return modint(*this)-=rhs;}constexpr modint operator*(const modint rhs) const noexcept{return modint(*this)*=rhs;}constexpr modint operator/(const modint rhs) const noexcept{return modint(*this)/=rhs;}constexpr modint &operator+=(const modint rhs) noexcept{val+=rhs.val;val-=((val>=mod)?mod:0);return (*this);}constexpr modint &operator-=(const modint rhs) noexcept{val+=((val<rhs.val)?mod:0);val-=rhs.val;return (*this);}constexpr modint &operator*=(const modint rhs) noexcept{val=val*rhs.val%mod;return (*this);}constexpr modint &operator/=(modint rhs) noexcept{uint64_t ex=mod-2;modint now=1;while(ex){now*=((ex&1)?rhs:1);rhs*=rhs,ex>>=1;}return (*this)*=now;}constexpr bool operator==(const modint rhs) noexcept{return val==rhs.val;}constexpr bool operator!=(const modint rhs) noexcept{return val!=rhs.val;}friend constexpr ostream &operator<<(ostream& os,const modint x) noexcept{return os<<(x.val);}friend constexpr istream &operator>>(istream& is,modint& x) noexcept{uint64_t t;is>>t,x=t;return is;}};int main() {riano_; //ll ans = 0;ll K,Q; cin >> K >> Q;vector<ll> cand;cand.push_back(K);ll n = K;while(n<1e18){//解から二分探索 binary search//分かれ目の"r"側の値を求めるll l,r,ans;l = 0; r = 1e18; r += 2; //初期値の代入while(l<r){ll c = (l+r)/2;//cの場合に検証ll nx = c-(c-1)/K-1;if(nx<n){//cが"l側"になる条件判定l = c+1;}else r = c;}ans = l;if(ans%K==1) ans--;cand.push_back(ans);n = ans;}// for(ll x:cand){// cout << x << endl;// }rep(i,Q){ll N; cin >> N;if(N<=K){cout << K << endl;}else{ll j = upper_bound(cand.begin(),cand.end(),N) - cand.begin();cout << cand[j-1] << endl;}}}