TC SRM 562 DIV 2

2014-11-24 08:58:19 · 作者: · 浏览: 0

做的练习赛,最后一题还没做出来。待续
A。水题~但是出了个很神奇的错误。
return “NO”。我居然把O打成0了。。
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#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.2cto.com
class CucumberMarket {
public:
string check(vector price, int budget, int k) {
int num=price.size();
int *a=new int[num];
for(int i=0;i a[i]=price[i];
sort(a,a+num,cmp);
int sum=0;
for(int i=0;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 clipboard, int T) {
memset(num,0,sizeof(num));
int n,m;
for(int i=0;i {
n=clipboard.size();
for(int j=0;j {
m=clipboard[i].length();
if(clipboard[i][j]=='B')
{
num[i][j]++;
}
}
}
ll sum=0;
for(int i=0;i {
for(int j=0;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;
}
};