A

有鱼则抓鱼,没有鱼也没有鱼饵就尝试用已有的鱼抓鱼。
在没有鱼有鱼饵的时候,有两种选择:
1.用已有鱼饵抓鱼,放弃当前阶段的鱼饵
2.不抓鱼,而去抓鱼饵。
使用第2种,如果游戏结束后,发现还有剩余的鱼饵a个,而这些鱼饵都是来自于(没有鱼,有鱼饵)a个阶段,所以可以安排这a个阶段重复进行这一阶段抓鱼饵,下一阶段抓鱼,于是就可再得到a/2鱼

#include <bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug  freopen("in.txt","r",stdin),freopen("out.txt","w",stdout);
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 2e6+10;
const int maxM = 1e6+10;
const int inf = 0x3f3f3f3f;

int T,N;
char s[maxn];

void solve(){
    int fish = 0,er = 0;
    for(int i = 1;i<=N;i++){
        if(s[i] == '0' && er){
            er -= 1;
            fish += 1;
        }
        if(s[i] == '1') er+=1;
        if(s[i] == '2') fish += 1;
        if(s[i] == '3') fish += 1;
    }
    cout<<fish + er/2<<'\n';
}
int main(){
    // debug;
    ios;

    cin>>T;
    while(T--){
        cin>>N;
        cin>>(s+1);
        solve();
    }
    return 0;
}

B

把这个字符串想像成一个首尾相连的字符串,用一个指向当前字符串头部的指针,先指向0号位置,如果M 4,就头指针往右移动4次,如果M -4就往左移动4次。在查询的时候,就是头指针+查询位置

#include <bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug  freopen("in.txt","r",stdin),freopen("out.txt","w",stdout);
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 2e6+10;
const int maxM = 1e6+10;
const int inf = 0x3f3f3f3f;

char s[maxn]; int p = 0;
int T;
int main(){
    // debug;
    ios;

    cin>>s;
    cin>>T;
    int len = strlen(s);
    while(T--){
        char op;int v;
        cin>>op>>v;
        if(op == 'M'){
            if(v>=0) p = (p + v)%len;
            else p = (p + v + len)%len;
        }else{
            v = (p+v-1)%len;
            cout<<s[v]<<'\n';
        }
    }
    return 0;
}

C

先找到长度最长的那一条边,为手掌最下面的那条边。然后确定好这条边从大拇指到小指的方向,在计算这条边的两个端点与小手指形成的三角形面积。用叉乘根据这个方向算三角形面积,如果为正代表逆时针,则是右手,否则就是左手。

#include <bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug  freopen("in.txt","r",stdin),freopen("out.txt","w",stdout);
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 1e6+10;
const int maxM = 1e6+10;
const int inf = 0x3f3f3f3f;

int T;
double x[maxn],y[maxn];
double len(int id1,int id2){
    return (x[id2] - x[id1]) * (x[id2] - x[id1]) + (y[id2]-y[id1])*(y[id2]-y[id1]);
}
void solve(){
    int L,id1,id2,R;
    double mxlen = -1;
    for(int i = 2;i<=20;i++){
        if(len(i-1,i) > mxlen){
            id1 = i-1,id2 = i;
            mxlen = len(i-1,i);
        }
    }
    if(len(1,20) > mxlen){
        id1 = 1,id2 =20;
        mxlen = len(1,20);
    }
    if(id1 == 1 && id2 == 20){
        L = 2,R = 19;
    }else{
        if(id1 == 1) L = 20;
        else L = id1-1;
        if(id2 == 20) R = 1;
        else R = id2+1;
    }
    int a,b,c;
    if(len(L,id1) < len(id2,R)) a = id1,b = id2,c = R;
    else a = id2,b = id1,c = L;
    double s = 0;
    vector<int> dat = {0,a,b,c};
    for(int i = 1;i<=3;i++){
        int l = dat[i],r = i<3? dat[i+1]:dat[1];
        s += x[l] * y[r] - x[r]*y[l];
    }
    if(s > 0) cout<<"right\n";
    else cout<<"left\n";
}
int main(){
    ios;

    cin>>T;
    while(T--){
        for(int i = 1;i<=20;i++){
            cin>>x[i]>>y[i];
        }
        solve();
    }
    return 0;
}

L

#include <bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug  freopen("in.txt","r",stdin),freopen("out.txt","w",stdout);
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 1e6+10;
const int maxM = 1e6+10;
const int inf = 0x3f3f3f3f;

string s;
int main(){
    // debug;
    ios;

    cin>>s;
    transform(s.begin(),s.end(),s.begin(),::tolower);
    if(s.size()<6 || s.substr(0,6) != "lovely"){
        cout<<"ugly\n";
    }else{
        cout<<"lovely\n";
    }
    return 0;
}