898B. Proper Nutrition#买啤酒问题(枚举&取余)
题目出处:http://codeforces.com/problemset/problem/898/B
题目大意:为一个整数能否由另外两个整数个整数合成
#include<iostream> using namespace std; int main(){ int n,a,b; cin>>n>>a>>b; if(n%2==1 && a%2==0 && b%2==0 ){cout<<"NO"<<endl;return 0;} if(a==b && n%a!=0){cout<<"NO"<<endl;return 0;} if(b%a==0 && n%a!=0){cout<<"NO"<<endl;return 0;} if(a%b==0 && n%b!=0){cout<<"NO"<<endl;return 0;} if(a==1){cout<<"YES"<<endl<<n<<" "<<0<<endl;return 0;} if(b==1){cout<<"YES"<<endl<<0<<" "<<n<<endl;return 0;} for(int i=0;i<=n/a;i++){//一层循环加上取余的方法 if( (n-i*a)%b==0 ){cout<<"YES"<<endl<<i<<" "<<(n-i*a)/b<<endl;return 0;} } cout<<"NO"<<endl; return 0; }
本题和分披萨那题题意相同,差别在于本题测试数据大,双层枚举会超时。
使用第一层枚举下再进行取余求解即可。
前面很多if语句只是对特殊情况的分析,加快特殊情况的解题速度。
个人分享,欢迎指导,未经允许,请勿转载。谢谢!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步