CSP202112 第四题 磁盘文件操作(C++ 25分)

2023-05-16

使用了tuple,但这么使用的话,只能符合前25%的数据,即m小于等于10000

#include <bits/stdc++.h>
#include <tuple>
using namespace std;
const int MAXN = 1e4 + 1;
// 数组下标代表标号,tuple三个数分别代表储存的值,上次访问的程序id,现在此空间的状态(为0则任何程序可访问)
tuple<int,int,int> a[MAXN];

int main()
{
    int n,m,k;
    scanf("%d%d%d",&n,&m,&k);
    while(k--)
    {
        int ope,id,l,r,x;
        scanf("%d",&ope);
        if(ope == 0)
        {
            scanf("%d%d%d%d",&id,&l,&r,&x);
            int ans = -1;
            for(int j = l; j <= r; j++)
            {
                int tmp = get<2>(a[j]);
                if(tmp == 0 || tmp == id)
                {
                    get<0>(a[j]) = x;
                    get<1>(a[j]) = (get<2>(a[j]) = id);
                    ans = j;
                }
                else break;
            }
            cout<<ans<<endl;
        }
        else if(ope == 1)
        {
            scanf("%d%d%d",&id,&l,&r);
            bool flag = true;
            for(int j = l; j <= r; j++)
            {
                int tmp = get<2>(a[j]);
                // cout<<tmp<<" ";
                if(tmp != id)
                {
                    flag = false;
                    break;
                }
            }
            if(flag == true)
            {
                for(int j = l; j <= r; j++)
                {
                    get<1>(a[j]) = id;
                    get<2>(a[j]) = 0;
                }
                cout<<"OK"<<endl;
            }
            else cout<<"FAIL"<<endl;
        }
        else if(ope == 2)
        {
            scanf("%d%d%d",&id,&l,&r);
            bool flag = true;
            for(int j = l; j <= r; j++)
            {
                int tmp1 = get<2>(a[j]);
                int tmp2 = get<1>(a[j]);
                if(tmp1 != 0 || tmp2 != id)
                {
                    flag = false;
                    break;
                }
            }
            if(flag == true)
            {
                for(int j = l; j <= r; j++)
                {
                    get<2>(a[j]) = id;
                    get<1>(a[j]) = id;
                }
                cout<<"OK"<<endl;
            }
            else cout<<"FAIL"<<endl;
        }
        else if(ope == 3)
        {
            int p;
            scanf("%d",&p);
            int tmp = get<2>(a[p]);
            if(tmp == 0)
            {
                printf("0 0\n");
            }
            else
            {
                cout<<tmp<<" "<<get<0>(a[p])<<endl;
            }
        }
    }

    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSP202112 第四题 磁盘文件操作(C++ 25分) 的相关文章

随机推荐