A. Hulk

题意是给你一个n 输出一个英文字符串,找下规律就发现 

当(i!=n&&i%2==1) 输出的是 I hate that (注意大写)

当(i!=n&&i%2==0) 输出的是 I love that (注意大写)

当(i==n&&i%2==1) 输出的是 I love it (注意大写)

当(i==n&&i%2==0) 输出的是 I love it (注意大写)

注意有空格;

#include<bits/stdc++.h>
#define int long long
#define MAX(a,b,c) max(a,max(b,c))
#define MIN(a,b,c) min(a,min(b,c))
#define pb push_back
#define fi first
#define se second
typedef long long ll;
typedef long long LL;
typedef unsigned long long ull;
typedef unsigned long long uLL;
using namespace std;
const int maxn=1e5+10;
const int INF=0x3f3f3f3f;
int32_t main()
{
    int n; cin>>n;
    for(int i=1;i<n;i++)
    {
        if(i%2==1) cout<<"I hate that"<<" ";
        else       cout<<"I love that"<<" ";
    }
    if(n%2==1) cout<<"I hate it"<<endl;
    else       cout<<"I love it"<<endl;
}
A.cpp

 

 B. Spider Man

题意有点难,每次给你以一个数n  让你去操作 输出结果;

每次操作是找一个圈  长度为x>=2  分成1-p  p-两段  

每个n  要去到 n-1 个点

n为偶数时 首次可以去掉 0  2 个点         第一个操作者可以操作最后一下,第一个操作者win 

当n为奇数时候   首次每次只能去掉1个点    就变成了奇数+偶数  第一个操作者 lost

#include<bits/stdc++.h>
#define int long long
#define MAX(a,b,c) max(a,max(b,c))
#define MIN(a,b,c) min(a,min(b,c))
#define pb push_back
#define fi first
#define se second
typedef long long ll;
typedef long long LL;
typedef unsigned long long ull;
typedef unsigned long long uLL;
using namespace std;
const int maxn=1e5+10;
const int INF=0x3f3f3f3f;
int32_t main()
{
    int n; cin>>n; int t=2;
    for(int i=1;i<=n;i++)
    {
        int x; cin>>x;
        if(x%2==1) cout<<t<<endl;
        else
        {
            if(t==1) t=2;
            else t=1;
            cout<<t<<endl;
        }
    }
}
B.cpp

 

C. Thor

题目意思就是n个程序发送手机通知 ,你去查看通知,问你每次剩下多少通知没看

有3种类型  

type 1  应用 b 发送一个通知;

type 2   阅读 b 的所有通知;

type 3    阅读前t个通知(可以重复阅读)

直接暴力肯定过不了  n*p 复杂度过不去

我们注意 单独的type2   type3 都可以用o(n)的复杂度过去

 我们就要把这两个联系在一起

执行type2操作时 我们要去重(type3操过的 (一前type2操作))

单独的type2时  每次type2时 总数减去 新加的amout[b] ;

新加的mount[b] 中可能有type3操作过的; 我们要在type中减去;

 

执行type3操作时候  遍历上一次 t1到这次的;

中间有type2读过的  所以要type2要标记位置,使type3遍历时候跳过这个数

#include<bits/stdc++.h>
#define int long long
#define MAX(a,b,c) max(a,max(b,c))
#define MIN(a,b,c) min(a,min(b,c))
#define pb push_back
#define fi first
#define se second
typedef long long ll;
typedef long long LL;
typedef unsigned long long ull;
typedef unsigned long long uLL;
using namespace std;
const int maxn=3e5+10;
const int INF=0x3f3f3f3f;
vector<int> vs[maxn];
pair<int,int> pa[maxn];
int amout[maxn];
int  pos[maxn];
int32_t main()
{
    int n,q; cin>>n>>q;
    int cnt=0,sum=0;
    int p=0;
    for(int i=0;i<q;i++)
    {
        int a,b; cin>>a>>b;
        if(a==1)
        {
            vs[b].pb(cnt);
            amout[b]++;
            sum++;
            pa[cnt].first=0;
            pa[cnt].second=b;
            cnt++;
        }
        if(a==2)
        {
            sum=sum-amout[b];
            amout[b]=0;
            for(int j=pos[b];j<vs[b].size();j++)
            {
                pa[vs[b][j]].first=1;
            }
            pos[b]=vs[b].size();
        }
        if(a==3)
        {
            for(int j=p;j<b;j++)
            {
                if(!pa[j].first)
                {
                    pa[j].first=1;
                    sum--;
                    amout[pa[j].second]--;
                }
            }
            p=max(p,b);
        }
        cout<<sum<<endl;
    }

}
C.cpp