A-石子游戏:https://www.nowcoder.com/acm/contest/186/A
思路:对于大于1的奇数分析,对于3 可以分为1,2,然后2与其他偶数合并,总共2次;考虑最后的偶数也与其他偶数合并,那么对于5可以分成 1,4 (2次)和 3,2 (4次),7和分为 1,6(2次),3,4(4次)和 5,2(6次)可以发现大于1的奇数的操作次数都是偶数次,那么说明奇数对于结果是没有影响的,只要对偶数个数考虑,当偶数个数为偶数是为Bob赢,为奇数则为 Alice赢,对于特殊情况,只有一个奇数时同样成立,而全为 1时则是 Bob赢
Code :
#include
using namespace std;
int main()
{
int n,s2=0,x,p=0;
cin>>n;
for(int i=0;i>x;
if(x%2==0) ++s2;
if(x>1) p=1;
}
string str="Alice";
if(!p||s2%2) str="Bob";
cout<
B-222333 :https://www.nowcoder.com/acm/contest/186/B
思路:dalao博客:http://www.cnblogs.com/skylee03/p/9649849.html
Code :
#include
#include
using namespace std;
typedef long long LL;
const int MAX_S=10000005;
int p;
int d[MAX_S];
int main()
{
int a,b;
while(cin>>p){
memset(d,0,sizeof(d));
int s=3;
for(int i=1;i<=p;s=s*3%p,++i)
if(!d[s]) d[s]=i;
else break;
LL n=p-2,inv=1,ai=2;
while(n){
if(n&1) inv=inv*ai%p;
ai=ai*ai%p;
n>>=1;
}
s=inv;
int sum=p+1;
for(int i=1;i<=p&&ii+d[s]){
a=i; b=d[s];
sum=a+b;
}
cout<
C-失衡天平 :https://www.nowcoder.com/acm/contest/186/C
思路:唉,好菜啊我,dalao博客:http://www.cnblogs.com/ccut-ry/p/9649813.html
易知在放置时操作多次其实和操作一次最终的效果是一样的
dp[i][j] : 在第 i 个物品天平两边相差为 j 的最大收益,
dp[i][j] = max(dp[i][j], dp[i-1][j]); //不选的情况
dp[i][j+x] = max(dp[i][j+x], dp[i-1][j]+x); //同侧
dp[i][abs(j-x)] = max(dp[i][abs(j-x)], dp[i-1][j]+x); //异侧
Code :
#include
#include
#include
#include
using namespace std;
const int MAX_N=105;
const int MAX_S=100005;
int n,m;
int dp[MAX_N][MAX_S];
int main()
{
memset(dp, -1, sizeof(dp));
dp[0][0]=0;
scanf("%d%d",&n,&m);
for(int i=1,x;i<=n;++i)
{
scanf("%d",&x);
for(int j=0;j