TC SRM 562 DIV 2
做的练习赛,最后一题还没做出来。待续
A。水题~但是出了个很神奇的错误。
return “NO”。我居然把O打成0了。。
[cpp]
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <stack>
#include <map>
#include <iomanip>
#define PI acos(-1.0)
#define Max 2005
#define inf 1<<28
#define LL(x) (x<<1)
#define RR(x) (x<<1|1)
#define FOR(i,s,t) for(int i=(s);i<=(t);++i)
#define ll long long
using namespace std;
bool cmp(int a,int b)
{
return a>b;
} www.zzzyk.com
class CucumberMarket {
public:
string check(vector <int> price, int budget, int k) {
int num=price.size();
int *a=new int[num];
for(int i=0;i<num;i++)
a[i]=price[i];
sort(a,a+num,cmp);
int sum=0;
for(int i=0;i<k&&i<num;i++)
sum+=a[i];
if(sum>budget)
return "NO";
else
return "YES";
}
};
B,模拟题,讲每个'B'标记一下,然后每找到一个‘B’,则从这里开始,沿着对角线遍历,找出下一个‘B’,比较两个之间的距离,sum+=min(两者的距离,T),因为有可能两个‘B’之间形不成直线,因为T的次数太小,所以得找出最小值。
[cpp]
int num[100][100];
class PastingPaintingDivTwo {
public:
long long countColors(vector <string> clipboard, int T) {
memset(num,0,sizeof(num));
int n,m;
for(int i=0;i<clipboard.size();i++)
{
n=clipboard.size();
for(int j=0;j<clipboard[i].length();j++)
{
m=clipboard[i].length();
if(clipboard[i][j]=='B')
{
num[i][j]++;
}
}
}
ll sum=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
int spn=0;
int k;
int spp=0;
if(num[i][j])
{
for(k=0;k<=min(n-i,m-j);k++)
{
if(num[i+k][j+k])
{
spp+=spn;
spn=k-spp;
sum+=min(spn,T);
}
num[i+k][j+k]=0;
}
//sum+=spn;
sum+=T;
}
}
}
return sum;
}
};
补充:软件开发 , C++ ,