1. Increasing by Modulo (Codeforce)
    题目大意:
    给定一组数字大小为0~m-1; 每次可以对任意多个数进行(ai+1)%m 的 操作
    问最少操作次数 把这组数字变成非递减的

思路 ::因为每次操作是对任意多个数进行 所以相当于 求对一个数操作次数的最大值 所以直接二分答案就可,保证每一部都是最优解后直接二分答案就可

#include<bits/stdc++.h>
using namespace std;

int a[300100];
int n,m;
bool OK(int x)
{
    int cnt=a[1];
    if((a[1]+x)>=m) cnt=0;

    for(int i=2;i<=n;i++)
    {
        if(a[i]==cnt) continue;
        if(a[i]<cnt) {
            if((a[i]+x)>=cnt) continue;
            else return false;
        }else {
            if((a[i]+x)>=m) {
                if((a[i]+x)%m>=cnt) continue;
                else cnt=a[i];
            }
            else cnt=a[i];
        }
    }
    return true;
}
int main()
{
     scanf("%d %d",&n,&m);

     for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
     }

     int l=0,r=m,f=0;
     while(l<=r)
     {
         int mid=(l+r)/2;
         if(l==r){
            printf("%d\n",mid);
            break;
         }
         if(OK(mid)){
            r=mid;
         }
         else {
            l=mid+1;
         }
     }
}

2.湖上泛舟 (HRBUST)
题目::
寒鸦空啼惊泛客,渔火独明暖沙洲。

年少既知愁滋味,一曲弹罢泪空流。

欲言还休不语处,只道心头好个秋。

这天,LCH在湖上划船,发现在湖中间某个点有一小岛,他很想上去看看。但是天公不作美,今天的风很大,而且风向多变,每一分钟都可能向着不同的方向吹。但是LCH有一个智能APP,可以预测出一段时间内的风向。假如风向是URLD,那么第一分钟风往U方向吹,第二分钟往R方向吹,第三分钟第四分钟则是L和D,到了第五分钟,又往U方向吹,以此类推。

假设风往U方向吹,那么船会从(x,y)移动到(x,y + 1)。

假设风往D方向吹,那么船会从(x,y)移动到(x,y - 1)。

假设风往L方向吹,那么船会从(x,y)移动到(x - 1,y)。

假设风往R方向吹,那么船会从(x,y)移动到(x + 1,y)。

LCH也可以控制船,在每分钟可以向着UDLR四个方向划船或者不划船,如果LCH选择划船,则相当于小船先沿风向走一个单位,再向划船方向走一个单位,如果LCH不划船,则相当于小船只是沿着风向走一个单位。

LCH很懒惰,他想知道最少多少分钟,他能达到小岛。

当然,他有可能根本无法到达小岛。

Input
每组输入数据包含两行。

第一行包括4个数字x1,y1,x2,y2,代表LCH和小岛的笛卡尔坐标位置。

第二行只有一行字符串s,代表APP预测的风向。

0 <= x1,y1,x2,y2 <= 1e9,s的长度不会超过1e5,并且只含有UDLR四种字符。

Output
输出一个整数,代表LCH到达小岛的最短时间,如果不能,则输出 -1 。

思路::直接二分答案,因为二分答案同时可以得到可自控移动的距离