首页 > 代码库 > CodeForces 42C Safe cracking 规律题
CodeForces 42C Safe cracking 规律题
题目链接:点击打开链接
3个数为一组,找最大的一个数让它减少,则显然是有解的,分类讨论一下即可
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<vector> using namespace std; int n, k; int a[4]; vector<pair<int,int> >ans; int maxpos(){ int pos = 0; for(int i = 1; i < 4; i++) if(a[pos]<a[i])pos = i; return pos; } void chu(int pos){ a[pos] >>= 1; a[(pos+1)%4] >>= 1; ans.push_back(pair<int,int>(0, pos)); } void ADD(int pos){ a[pos] ++; a[(pos+1)%4] ++; ans.push_back(pair<int,int>(1, pos)); } int main(){ while(cin>>a[0]>>a[1]>>a[2]>>a[3]){ ans.clear(); int pos, siz = 0; while(1){ pos = maxpos(); if(a[pos]==1)return true; int l = pos-1; if(l<0)l = 3; int r = pos+1; if(r>3)r = 0; if(a[pos]&1){ if(a[l]&1) { ADD(l); chu(l); } else if(a[r]&1) { ADD(pos); chu(pos); } else { ADD(pos); chu(l); } } else { if((a[l]&1)==0) { chu(l); } else if((a[r]&1)==0) { chu(pos); } else { ADD(l); ADD(pos); chu(l); } } } for(int i = 0; i < ans.size(); i++) printf("%c%d\n", ans[i].first?'+':'/', ans[i].second+1); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。