Codeforces Round #653 (Div. 3) AB 题解

    技术2024-11-06  3

    A. Required Remainder

    解法很简单,是个人应该都知道

    #include <bits/stdc++.h> using namespace std; int main() { int n,x,y; int t; cin>>t; while(t--) { cin>>x>>y>>n; int div=(n-y)/x; if(div*x+y<=n) cout<<div*x+y<<endl; else cout<<div*x-y<<endl; } return 0; }

    B. Multiply by 2, divide by 6

    翻译一下, 就是一个数,你可以将它乘2或者除以6,反正最后要让它变成1,输出最小的操作次数,如果不行输出-1

    解法:首先分解质因数,这个数必须只包括2和3,且2的次数必须不大于3的次数。原因很简单,你不能乘3只能乘2,如果2的次数较大的话,怎么样能正好配对除以6呢?

    #include <bits/stdc++.h> using namespace std; // 18=2*3^2 cnt3-cnt2+cnt3 int main() { int n,t; ios::sync_with_stdio(false); cin>>t; while(t--) { cin>>n; int cnt2=0,cnt3=0; while(n%2==0) { cnt2++; n/=2; } while(n%3==0) { cnt3++; n/=3; } if(n!=1||cnt2>cnt3) cout<<"-1"<<endl; else cout<<2*cnt3-cnt2<<endl; } return 0; }

     

    写作不易,麻烦动个手点个赞,行不?

    Processed: 0.018, SQL: 9