做的练习赛,最后一题还没做出来。待续 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; } };