Srm 528 div2

250:题意:在20以内的串,只有'?','o','x'.'?'可以变为'x'或者'o',变得代价不同,求最小代价变为回文的。

略思,20个长度,不大,暴力就能解决,话说tc250一般都是暴力啊,500dp的多。

#include <cstdio>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <stack>
#include <queue> 
#include <set>
#include <map>
#include <algorithm>
using  namespace  std;
class MinCostPalindrome{
public:
int getMinimum(string s, int oCost, int xCost)
{
int i,len,cost;
len=s.size ();
cost=0;
for(i=0;i<len/2;i++)
{
if(s[i]==s[len-i-1]&&s[i]!='?') continue;
if(s[i]=='?'&&s[len-i-1]=='o'||s[i]=='o'&&s[len-i-1]=='?') cost+=oCost;
if(s[i]=='?'&&s[len-i-1]=='x'||	s[i]=='x'&&s[len-i-1]=='?') cost+=xCost;
if(s[i]=='?'&&s[len-i-1]=='?') 
{
if(oCost>xCost) cost+=xCost*2;
else cost+=oCost*2;
}
if(s[i]!=s[len-i-1]&&s[i]!='?'&&s[len-i-1]!='?'){cost=-1;break;}//这里做的时候没有加break,结果错了,没人cha,>_<
}
return cost;
}
};

上次526.5的250pt也犯了个这么低级的错误:break没加{}.,实例化调试后才发现。。。囧.....
#include <cstdio> 
#include <iostream> 
#include <sstream> 
#include <cstring> 
#include <cmath> 
#include <string> 
#include <vector> 
#include <stack> 
#include <queue>  
#include <set> 
#include <map> 
#include <algorithm> 
using  namespace  std; 

class MagicStonesStore{ 
public: 
  string  ableToDivide(int n) 
  { 
    int i,j; 
    bool  prime[2005]; 
    string str="NO"; 
    for(i = 0; i <= 2000; i++) 
       prime[i] = true; 
       prime[0]=prime[1]=false;
    for(i = 2; i <= 1000; i++) 
        if(prime[i]) 
         for(j = 2; i*j <= 2000; j++) 
        prime[i*j] = false;  
    for(i=2;i<2*n;i++)
    { 
		if(prime[i]&&prime[2*n-i]) {str="YES"; break;} 
    } 
    return str; 
  } 
};
int main()
{
	MagicStonesStore m;
	int n;
	string s;
	while(cin>>n)
	{
		s=m.ableToDivide(n);
		cout<<s<<endl;
	}
}





500pt: 给出一个vector数组,还有切得刀数。切成10的长度,问最多能切成几段。

开始想设个数组存下处理过的vector,按照被切的优先顺序存放。

结束后看了大牛的代码,发现先处理能被10整除的数,再处理不能被10整除的数。

#include <cstdio>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <stack>
#include <queue> 
#include <set>
#include <map>
#include <algorithm>
using  namespace  std;
class Cut{
public:
int getMaximum(vector <int> eelLengths, int maxCuts)
{
Int ans=0;
Sort(a.begin(),a.end());
For(int i=0;i<a.size();++i)
If(a[i]%10==0)
{
Int d=(a[i]/10)-1;
If(d<=m) ans+=a[i]/10,m-=d;
Else 
Ans+=m,m=0;
}
For(int i=0;i<a.size();++i)
If(a[i]%10!=0)
{
Int d=min(m,(a[i]/10));
Ans+=d,m-=d;
}
Return ans;
}
};


1000 暂时无力- - |||

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值