最后一场计蒜客的icpc训练了
本准备与队友合练的,结果没想到队友都进城了,那就单挑好了
水水四题,就这样吧,节约时间啊,没太多时间给我浪费了
A. Anniversary
思路:这个估计是前四题中最难的了,但由于数据量只有1e3,那么O(n^2)的算法完全可以过,那么就预处理一下区间最大值,做个dp就好了
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
#include <string>
#include <queue>
#include <stack>
using namespace std;
const int maxn = 1010;
int height[maxn];
int dp[maxn][maxn];
int main()
{
int t;
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
int n;
int area = 0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&height[i]);
}
for(int i=0;i<n;i++)
{
dp[i][i] = height[i];
area = max(area,dp[i][i]);
for(int j=i+1;j<n;j++)
{
dp[i][j] = min(dp[i][j-1],height[j]);
area = max(area,dp[i][j] * (j-i+1));
}
}
printf("%d\n",area);
}
}
return 0;
}
B. Currency
思路:这题更水了,就是一个简单的计算,由于一开始可能数据出错了,导致WA声一片,不过后来rejudge后,基本也没啥问题
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
#include <string>
#include <queue>
#include <stack>
using namespace std;
const int maxn = 1e5+10;
const double eps = 1e-15;
char currency[20][maxn];
double money[20];
int main()
{
int n;
//printf("%.2f %.2f %.2f",5.005,5.0049999+eps,5.005+eps);
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
scanf("%s%lf",currency[i],&money[i]);
}
double sum;
scanf("%lf",&sum);
for(int i=0;i<n;i++)
{
double re = 100.0 * sum / money[i] + eps;
printf("%s %.2f\n",currency[i],re);
}
//printf("%d\n",sum);
}
return 0;
}
C. Slogan
思路:字符串预处理,将无用字符删去,将大写转小写,然后双指针判个回文就好了
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
#include <string>
#include <queue>
#include <stack>
using namespace std;
const int maxn = 1010;
char slogan[maxn],tempslogan[maxn];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
getchar();
while(n--)
{
gets(tempslogan);
int templen = strlen(tempslogan);
int len = 0;
bool panama = true;
for(int i=0;i<templen;i++)
{
if(tempslogan[i]==' '||tempslogan[i]=='.'||tempslogan[i]==',')
{
continue;
}
if(tempslogan[i]>='A'&&tempslogan[i]<='Z')
{
slogan[len++] = tempslogan[i] - 'A' + 'a';
}
else
{
slogan[len++] = tempslogan[i];
}
}
slogan[len] = '\0';
//printf("%s\n",slogan);
for(int i=0,j=len-1;i<=j;i++,j--)
{
if(slogan[i]!=slogan[j])
{
panama = false;
break;
}
}
if(panama)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
}
return 0;
}
D. Go
思路:围棋黑白子比大小,这个确实没啥说的了
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
#include <string>
#include <queue>
#include <stack>
using namespace std;
const int maxn = 1e5+10;
int main()
{
int b,w;
while(scanf("%d%d",&b,&w)!=EOF)
{
if(b+w<19*19)
{
printf("Unknown\n");
}
else
{
b -= 7;
//cout << b<< endl;
if(b>w)
{
printf("Black\n");
}
else
{
printf("White\n");
}
}
}
return 0;
}
文章地址:http://blog.csdn.net/owen_q/article/details/78241151