NC21875. 牛牛玩石头
描述
输入描述
输入一行包含三个整数
输出描述
如果可以输出"possible"
否则输出"impossible"
示例1
输入:
10 15 35
输出:
possible
示例2
输入:
1 1 2
输出:
impossible
示例3
输入:
4 6 8
输出:
impossible
C++14(g++5.4) 解法, 执行用时: 9ms, 内存消耗: 508K, 提交时间: 2019-10-10 16:54:39
#include<bits/stdc++.h> using namespace std; const int maxn=1e5+200; int main() { int a,b,c; cin>>a>>b>>c; for(int i=1;i<=maxn;i++) { int r=rand()%3; if(a<b) swap(a,b); if(a<c) swap(a,c); if(b<c) swap(b,c); if(a>b&&r==0) a-=b,b+=b; if(a>c&&r==1) a-=c,c+=c; if(b>c&&r==2) b-=c,c+=c; if(a==b&&b==c) break; } if(a==b&&b==c) cout<<"possible"<<endl; else cout<<"impossible"<<endl; }
C 解法, 执行用时: 13ms, 内存消耗: 476K, 提交时间: 2021-06-08 17:12:29
#include<stdio.h> const int maxn=100; int main() { int a,b,c,t; scanf("%d%d%d",&a,&b,&c); for(int i=1;i<=maxn;i++) { if(a<b) t=a,a=b,b=t; if(a<c) t=a,a=c,c=t; if(b<c) t=c,c=b,b=t; if(b>c) b-=c,c+=c; if(a>b) a-=b,b+=b; if(a==b&&b==c) break; } if(a==b&&b==c) printf("possible\n"); else printf("impossible\n"); }
C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 504K, 提交时间: 2019-10-10 18:50:58
#include<bits/stdc++.h> #define rep(i,s,e) for(int i=s; i<e; ++i) using namespace std; int main(){ int a,b,c; cin>>a>>b>>c; rep(i,0,100){ if(a<b) swap(a,b); if(a<c) swap(a,c); if(b<c) swap(b,c); if(b>c) b-=c,c+=c; if(a>b) a-=b,b+=b; if(a==b&&b==c) return puts("possible"),0; } return puts("impossible"),0; }