結果
問題 | No.683 Two Operations No.3 |
ユーザー | ppp |
提出日時 | 2018-05-23 01:20:30 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 21 ms / 2,000 ms |
コード長 | 3,962 bytes |
コンパイル時間 | 948 ms |
コンパイル使用メモリ | 107,336 KB |
実行使用メモリ | 50,432 KB |
最終ジャッジ日時 | 2024-06-28 16:00:35 |
合計ジャッジ時間 | 1,963 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 20 ms
50,204 KB |
testcase_01 | AC | 21 ms
50,192 KB |
testcase_02 | AC | 19 ms
50,304 KB |
testcase_03 | AC | 20 ms
50,176 KB |
testcase_04 | AC | 20 ms
50,304 KB |
testcase_05 | AC | 20 ms
50,432 KB |
testcase_06 | AC | 20 ms
50,176 KB |
testcase_07 | AC | 21 ms
50,220 KB |
testcase_08 | AC | 20 ms
50,232 KB |
testcase_09 | AC | 20 ms
50,252 KB |
testcase_10 | AC | 20 ms
50,276 KB |
testcase_11 | AC | 20 ms
50,176 KB |
testcase_12 | AC | 19 ms
50,424 KB |
testcase_13 | AC | 20 ms
50,304 KB |
testcase_14 | AC | 20 ms
50,304 KB |
testcase_15 | AC | 19 ms
50,404 KB |
ソースコード
#include <fstream>#include <iostream>#include <algorithm>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <string>#include <sstream>#include <map>#include <set>#include <vector>#include <stack>#include <cmath>#include <queue>#include <random>using namespace std;#define INT_MAX_VALUE 2147483647#define LONG_LONG_MAX_VALUE 9223372036854775807#define ll long long#define ld long doublestruct XX{ll la;ll lb;ll ra;ll rb;ll q;};class xxGreater {public:bool operator()(const XX& riLeft, const XX& riRight) const {//第2条件if((riLeft.q) == (riRight.q)){return riLeft.q < riRight.q;//<:昇順(小さいものから順番)、>:降順(大きいものから順番)//プライオリティキューの場合は > で、top()すると値の小さいものがとれる}//第1条件return (riLeft.q) < (riRight.q);}};//map<long long,long long> prime_f(long long n){// map<long long,long long>res;// for(int i=2;i*i<=n;i++){// while(n%i==0){// ++res[i];// n/=i;// }// }// if(n!=1)res[n]=1;// return res;//}int n;//int dat[2*10000000];//int dat2[2*10000000];int dat[2*100];int dat2[2*100];void init(int n_){n=1;while(n<n_)n*=2;for(int i=0;i<2*n-1;i++){dat[i]=0;dat2[i]=0;}}void initset(int k,int a){k+=n-1;dat[k]=a;while(k>0){k=(k-1)/2;dat[k]=dat[k*2+1]+dat[k*2+2];}}//[a,b)の間を[l,r]区間で比較しアップデート//引数のindexに注意//nは固定。initで計算すみ//update2(L[i],R[i]+1,0,0,n,D[i]);void update2(int a,int b,int k,int l,int r,int v){//v更新値、区間は0-indexif(r<=a || b<=l)return;if(a<=l && r<=b){dat[k]+=dat2[k];if(r-l>1){dat2[k*2+1]+=dat2[k]/2;dat2[k*2+1]+=dat2[k]/2;}dat2[k]=v*(r-l);return;}else{update2(a,b,k*2+1,l,(l+r)/2,v);update2(a,b,k*2+2,(l+r)/2,r,v);return;}}int query(int a,int b,int k,int l,int r){if(r<=a || b<=l)return 0;if(a<=l && r<=b){dat[k]+=dat2[k];if(r-l>1){dat2[k*2+1]+=dat2[k]/2;dat2[k*2+1]+=dat2[k]/2;}dat2[k]=0;return dat[k];}else{int vl=query(a,b,k*2+1,l,(l+r)/2);int vr=query(a,b,k*2+2,(l+r)/2,r);return vl+vr;}}set<pair<ll,ll>>a[1000000];int main(int argc, const char * argv[]){//scanf("%s",S);//scanf("%d",&N);//scanf("%lld %lld",&target1,&target2);//sscanf(tmp.c_str(),"%dd%d%d",&time[i], &dice[i], &z[i]);//getline(cin, target);//ifstream ifs( "1_06.txt" );//テスト用//ifs >> a;//ここから//入力高速化ios::sync_with_stdio(false);cin.tie(0);ll A,B;cin >> A >> B;//set<pair<ll,ll>>a[1000000];a[0].insert(make_pair(A,B));int f=0;int i=1;while(f==0){f=1;for(auto s:a[i-1]){if(s.first%2==0 && s.second-1>0){a[i].insert(make_pair(s.first/2,s.second-1));f=0;}if(s.first-1>0 && s.second%2==0){a[i].insert(make_pair(s.first-1,s.second/2));f=0;}if((s.second-1==0 && s.first%2==0) || s.second==0){cout << "Yes" << endl;return 0;}if((s.first-1==0 && s.second%2==0) || s.first==0){cout << "Yes" << endl;return 0;}}i++;if(f==1){break;}}cout << "No" << endl;//ここまで//cout << "ans" << endl;改行含む//printf("%.0f\n",ans);//小数点以下表示なし//printf("%.7f\n",p);return 0;}