uva 537 Artificial Intelligence?
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid;=8&page;=show_problem&problem;=478 题意:给出一段文字。。其中包含了 P,U,I(功率,电压,电流)中的两个。。求第三个。 思路:字符串处理。。第一次用vim复制整段代码。。命令模式下按v,然后光标扫过的区域都会选中,按y就就复制到剪贴板了。。 所以虽然代码写了300行但只有100行是需要写的。。200行复制改下就好== WA了两次。。一次是因为I写成了小写。。另一次是因为多组数据记得初始化多次。
/* ***********************************************
Author :111qqz
Created Time :2016年01月22日 星期五 03时25分16秒
File Name :code/uva/537.cpp
************************************************ */
1#include <cstdio>
2#include <cstring>
3#include <iostream>
4#include <algorithm>
5#include <vector>
6#include <queue>
7#include <set>
8#include <map>
9#include <string>
10#include <cmath>
11#include <cstdlib>
12#include <ctime>
13#define fst first
14#define sec second
15#define lson l,m,rt<<1
16#define rson m+1,r,rt<<1|1
17#define ms(a,x) memset(a,x,sizeof(a))
18typedef long long LL;
19#define MP make_pair
20using namespace std;
21const double eps = 1E-8;
22const int dx4[4]={1,0,0,-1};
23const int dy4[4]={0,-1,1,0};
24const int inf = 0x3f3f3f3f;
25string str;
26char cstr[20];
27double i,p,u;
28int pu,pp;
29int pi;
30int pv,pw,pa;
31int beishu;
32string tmp;
33int main()
34{
35 #ifndef ONLINE_JUDGE
36 freopen("code/in.txt","r",stdin);
37 #endif
38 int T;
39 int cas = 0;
40 cin>>T;
41 getchar();
42 while (T--)
43 {
44 beishu = 0; //多组数据。。。忘记每次都初始化==
45 printf("Problem #%d\n",++cas);
46 getline(cin,str);
47// cout<<"str:"<<str<<endl;
48 pu=str.find("U=");
49 pi=str.find("I=");
50 pp=str.find("P=");
51// cout<<"pi:"<<pi<<" pu:"<<pu<<" pp:"<<pp<<endl;
52 if (pp==-1)
53 {
54 pv=str.find('V',pu+1);
55 pa=str.find('A',pi+1);
1 if (str[pv-1]=='m'||str[pv-1]=='k'||str[pv-1]=='M')
2 {
3 if (str[pv-1]=='m')
4 {
5 beishu-=3;
6 tmp = str.substr(pu+2,pv-pu-3);
7 }
8 if (str[pv-1]=='k')
9 {
10 beishu+=3;
11 tmp = str.substr(pu+2,pv-pu-3);
12 }
13 if (str[pv-1]=='M')
14 {
15 beishu+=6;
16 tmp = str.substr(pu+2,pv-pu-3);
17 }
18 }
19 else
20 {
21 tmp = str.substr(pu+2,pv-pu-2);
22 }
1 strcpy(cstr,tmp.c_str());
2 sscanf(cstr,"%lf",&u);
3// cout<<"u:"<<u<<endl;
4 if (str[pa-1]=='m'||str[pa-1]=='k'||str[pa-1]=='M')
5 {
6 if (str[pa-1]=='m')
7 {
8 beishu-=3;
9 tmp = str.substr(pi+2,pa-pi-3);
10 }
11 if (str[pa-1]=='k')
12 {
13 beishu+=3;
14 tmp = str.substr(pi+2,pa-pi-3);
15 }
16 if (str[pa-1]=='M')
17 {
18 beishu+=6;
19 tmp = str.substr(pi+2,pa-pi-3);
20 }
21 }
22 else
23 {
24 tmp = str.substr(pi+2,pa-pi-2);
25 }
26 strcpy(cstr,tmp.c_str());
27 sscanf(cstr,"%lf",&i);
28// cout<<"i:"<<i<<endl;
1 p = 1.0;
2 if (beishu<0)
3 {
4 for ( int i = 1 ; i <= abs(beishu) ; i++)
5 {
6 p = p*0.1;
7 }
8 }
9 else
10 {
11 for ( int i = 1 ; i <= beishu ; i++)
12 {
13 p = p * 10;
14 }
15 }
16 p = p*u*i;
17 printf("P=%.2fW\n",p);
18 }
19 if (pi==-1)
20 {
21 pv = str.find('V',pu+1);
22 pw = str.find("W",pp+1);
23 if (str[pv-1]=='m'||str[pv-1]=='k'||str[pv-1]=='M')
24 {
25 if (str[pv-1]=='m')
26 {
27 beishu+=3;
28 tmp = str.substr(pu+2,pv-pu-3);
29 }
30 if (str[pv-1]=='k')
31 {
32 beishu-=3;
33 tmp = str.substr(pu+2,pv-pu-3);
34 }
35 if (str[pv-1]=='M')
36 {
37 beishu-=6;
38 tmp = str.substr(pu+2,pv-pu-3);
39 }
40 }
41 else
42 {
43 tmp = str.substr(pu+2,pv-pu-2);
44 }
1 strcpy(cstr,tmp.c_str());
2 sscanf(cstr,"%lf",&u);
3// cout<<"u:"<<u<<endl;
1 if (str[pw-1]=='m'||str[pw-1]=='k'||str[pw-1]=='M')
2 {
3 if (str[pw-1]=='m')
4 {
5 beishu-=3;
6 tmp = str.substr(pp+2,pw-pp-3);
7 }
8 if (str[pw-1]=='k')
9 {
10 beishu+=3;
11 tmp = str.substr(pp+2,pw-pp-3);
12 }
13 if (str[pw-1]=='M')
14 {
15 beishu+=6;
16 tmp = str.substr(pp+2,pw-pp-3);
17 }
1 }
2 else
3 {
4 tmp = str.substr(pp+2,pw-pp-2);
5 }
1 strcpy(cstr,tmp.c_str());
2 sscanf(cstr,"%lf",&p);
3// cout<<"p:"<<p<<endl;
1 i=1.0;
2 if (beishu<0)
3 {
4 for ( int i = 1 ; i <=abs(beishu) ; i++)
5 {
6 i=i*0.1;
7 }
8 }
9 else
10 {
11 for ( int i = 1 ; i <= beishu ; i++)
12 {
13 i=i*10;
14 }
15 }
16 i = i*p/u;
17 printf("I=%.2fA\n",i);
18 }
1 if (pu==-1)
2 {
3 pa = str.find('A',pi);
4 pw = str.find('W',pp);
5 if (str[pa-1]=='m'||str[pa-1]=='k'||str[pa-1]=='M')
6 {
7 if (str[pa-1]=='m')
8 {
9 beishu+=3;
10 tmp = str.substr(pi+2,pa-pi-3);
11 }
12 if (str[pa-1]=='k')
13 {
14 beishu-=3;
15 tmp = str.substr(pi+2,pa-pi-3);
16 }
17 if (str[pa-1]=='M')
18 {
19 beishu-=6;
20 tmp = str.substr(pi+2,pa-pi-3);
21 }
22 }
23 else
24 {
25 tmp = str.substr(pi+2,pa-pi-2);
26 }
27 strcpy(cstr,tmp.c_str());
28 sscanf(cstr,"%lf",&i);
29// cout<<"i:"<<i<<endl;
1 if (str[pw-1]=='m'||str[pw-1]=='k'||str[pw-1]=='M')
2 {
3 if (str[pw-1]=='m')
4 {
5 beishu-=3;
6 tmp = str.substr(pp+2,pw-pp-3);
7 }
8 if (str[pw-1]=='k')
9 {
10 beishu+=3;
11 tmp = str.substr(pp+2,pw-pp-3);
12 }
13 if (str[pw-1]=='M')
14 {
15 beishu+=6;
16 tmp = str.substr(pp+2,pw-pp-3);
17 }
1 }
2 else
3 {
4 tmp = str.substr(pp+2,pw-pp-2);
5 }
1 strcpy(cstr,tmp.c_str());
2 sscanf(cstr,"%lf",&p);
3// cout<<"p:"<<p<<endl;
1 u = 1;
2 if (beishu<0)
3 {
4 for ( int i = 1 ; i <=abs(beishu) ; i++)
5 {
6 u *=0.1;
7 }
8 }
9 else
10 {
11 for ( int i = 1 ; i <= beishu ; i++)
12 {
13 u *=10;
14 }
15 }
16 u = u*p/i;
17 printf("U=%.2fV\n",u);
}
printf("\n");
}
1 #ifndef ONLINE_JUDGE
2 fclose(stdin);
3 #endif
4 return 0;
5}