Jeanny
寂兮,寥兮,独立不改,周行而不殆

游戏:

可以通过观察得出,例如下面的图片,flea如果和m相同,则不会胜利;

如果flea在m的左边则不如在m的右边,为什么呢?因为c在m右边的次数多,因此flea失败的次数就会多。

那么此刻flea应该选择m的右边,且是m右边第一个是最优的

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int n,m;
int main(){
  cin>>n>>m;
  if(n%2 == 1 && m == (n+1)/2)cout<<m-1<<endl;
  else if( m<=(n+1)/2 ) cout<<m+1<<endl;
  else cout<<m-1<<endl;
  return 0;
}

 circle

任意三个数,满足什么条件就是顺时针

a<b<c一定是么?yes

顺时针还可以是什么条件

a<b<c这一圈,改变a,b,c的位置,则有了不同的大小关系

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int n,a,b,c;
int main(){
  scanf("%d%d%d%d",&n,&a,&b,&c);
  if((a<b && b<c) || (a<b && c<b && a > c) || (a>b && b<c && a>c))
    printf("1");
  if((a>b && b>c) || (a<b && c<b && a < c) || (a>b && b<c && a<c))
    printf("0");
  return 0;
}

将军下棋

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#define p 1000000007
#define ll long long
using namespace std;
int n,m,a[2005][2005];
ll f[2005][2005],g[2005][2005];
int main(){
  scanf("%d%d",&n,&m);
  for(int i = 1; i <= n; i++)
    for(int j = 1; j <= m; j++){
      scanf("%d",&a[i][j]);
    }
  f[1][1] = a[1][1]; g[1][1] = 1;
  for(int i = 2; i <= n; i++){
    f[i][1] = f[i-1][1] + a[i][1];
    g[i][1] = 1;
  }
  for(int j = 2; j <= m; j++){
    f[1][j] = f[1][j - 1] + a[1][j];
    g[1][j] = 1;
  }

  for(int i = 2; i <= n; i++)
    for(int j = 2; j <= m; j++){
      if(f[i - 1][j] > f[i][j - 1]){
        f[i][j] = f[i-1][j] + a[i][j];
        g[i][j] = g[i-1][j]%p;
      }
      else if(f[i-1][j] < f[i][j-1]){
        f[i][j] = f[i][j-1] + a[i][j];
        g[i][j] = g[i][j-1]%p;
      }
      else{
        f[i][j] = f[i][j-1] + a[i][j];
        g[i][j] = (g[i][j-1]%p + g[i-1][j]%p)%p;
      }
    }
    printf("%lld\n%lld\n",f[n][m],g[n][m]%p);
    return 0;
}

 

posted on 2019-08-19 16:02  Jeanny  阅读(130)  评论(0)    收藏  举报