| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
1A过了,附代媽,给幾组数据1.除法注意精度
2.乘和除注意零的问题
3.中间结果可能大于100,可能是负数,也可能不是整数
4.注意输出OK!而不是YES!
5.嫑忘了两两组合的情况
数据:
2 0 0 5 9
NO!
2 2 13 13 24
OK!
7 19 25 4 233
OK!
5 53 32 53 233
OK!
代媽:
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <iomanip>
using namespace std;
double shu[4], tar;
int pl[24][4] = {{0,1,2,3},{0,1,3,2},{0,2,1,3},{0,2,3,1},{0,3,1,2},{0,3,2,1},
{1,0,2,3},{1,0,3,2},{1,2,0,3},{1,2,3,0},{1,3,0,2},{1,3,2,0},
{2,1,0,3},{2,1,3,0},{2,0,1,3},{2,0,3,1},{2,3,0,1},{2,3,1,0},
{3,0,1,2},{3,0,2,1},{3,1,0,2},{3,1,2,0},{3,2,0,1},{3,2,1,0}};
bool ok(double *sz, int gs, double tar){
switch(gs){
case 2:{
//cout << sz[0] << " " << sz[1] << " " << tar << endl;
return abs(sz[0]+sz[1]-tar)<1e-6 || abs(sz[0]-sz[1]-tar)<1e-6 || abs(sz[0]*sz[1]-tar)<1e-6 || (sz[1]!=0 && abs(sz[0]*1.0/sz[1]-tar)<1e-6);
}
case 3:{
//cout << sz[0] << " " << sz[1] << " " << sz[2] << " " << tar << endl;
return (sz[0]==0 && tar==0) ||
ok(sz+1,2,tar-sz[0]) ||
ok(sz+1,2,sz[0]-tar) ||
(sz[0]!=0 && ok(sz+1,2,tar/sz[0])) ||
(tar!=0 && sz[0]!=0 && ok(sz+1,2,sz[0]/tar)) ||
(sz[2]==0 && tar==0) ||
ok(sz,2,tar-sz[2]) ||
ok(sz,2,tar+sz[2]) ||
(sz[2]!=0 && ok(sz,2,tar/sz[2])) ||
(sz[2]!=0 && ok(sz,2,tar*sz[2]));
}
case 4:{
if((sz[0]*sz[1]*sz[2]*sz[3]==0) && tar==0) return 1;
double szz[4];
for(int i = 0; i < 24; i++){
for(int j = 0; j < 4; j++) szz[j] = sz[pl[i][j]];
double qlg[4], hlg[4];
qlg[0]=szz[0]+szz[1], qlg[1]=szz[0]-szz[1], qlg[2]=szz[0]*szz[1];
qlg[3] = (szz[1]!=0) ? (szz[0]*1.0/szz[1]) : qlg[0];
hlg[0]=szz[2]+szz[3], hlg[1]=szz[2]-szz[3], hlg[2]=szz[2]*szz[3];
hlg[3] = (szz[3]!=0) ? (szz[2]*1.0/szz[3]) : hlg[0];
for(int j = 0; j < 4; j++){
for(int k = 0; k < 4; k++){
double tmp[2];
tmp[0] = qlg[j], tmp[1] = hlg[k];
if(ok(tmp,2,tar)) {
//cout << j << " " << k << endl;
return 1;
}
}
}
bool cond = ok(szz+1,3,tar-szz[0]) ||
ok(szz+1,3,szz[0]-tar) ||
(szz[0]!=0 && ok(szz+1,3,tar/szz[0])) ||
(tar!=0 && szz[0]!=0 && ok(szz+1,3,szz[0]/tar)) ||
ok(szz,3,tar-szz[3]) ||
ok(szz,3,tar+szz[3]) ||
(szz[3]!=0 && ok(szz,3,tar/szz[3])) ||
(szz[3]!=0 && ok(szz,3,tar*szz[3]));
if(cond) return 1;
}
return 0;
}
default: return 0;
}
}
double clearSr(double sr){
return (double)((int)(sr+1e-6));
}
int main() {
//double test[3] = {2,2,13};
//cout << ok(test,3,24/13.0);
while(1){
cin >> shu[0];
if(shu[0]<0) return 0;
cin >> shu[1] >> shu[2] >> shu[3] >> tar;
for(int i = 0; i < 4; i++) shu[i] = clearSr(shu[i]);
tar = clearSr(tar);
//printf("%.16lf %.16lf %.16lf %.16lf %.16lf\n", shu[0],shu[1],shu[2],shu[3],tar);
cout << shu[0] << " " << shu[1] << " " << shu[2] << " " << shu[3] << " " << tar << " " << (ok(shu, 4, tar) ? "OK!" : "NO!") << endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator