第二题:A. Satisfying Constraints

#include

using namespace std;

const int N=110;

int q[N];

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int t;
	cin>>t;
	
	while(t--)
	{
		int n;
		cin>>n;
		
		int a,x;
		int max_temp=1e9+10;
		int min_temp=0;
		int num=0;
		int res=0;
		bool flag=true;
		
		while(n--)
		{
			cin>>a>>x;
			
			if(min_temp>max_temp)
			{
				res=0;
				flag=false;
				//break;
			}
			
			if(a==1&&flag==true)
			{
				if(x>min_temp)  min_temp=x;
			}
			else if(a==2&&flag==true)
			{
				if(x<max_temp)  max_temp=x;
			}
			else if(flag==true)
			{
				q[++num]=x;
			}
		}
		
		int ans=0;
		for(int i=1;i<=num;i++)
		{
			if(q[i]>=min_temp&&q[i]<=max_temp)
			{
				ans++;
			}
		}
		
//		puts("");
//		puts("ans:");
//		cout<
//		cout<
		
		//puts("");
		//puts("res:");
		if(flag) res=max_temp-min_temp+1-ans; 
		if(res>=0)  cout<<res<<endl;
        else    puts("0");
		//puts("");
		memset(q,0,sizeof q);
	}
	
	return 0;
}

WA 2:想不明白问题出在哪里

我的思路是,定义一个区间的最小值和最大值,维护这两个端点,端点的差值+1,表示的是这个区间所有的数字的数目,再减去a==3时候表示的不等于的情况的数目,就是最后的答案

特判一下,假设区间左端点大于右端点,表示不存在这种i情况,直接输出0即可

#include

using namespace std;

void solve()
{
    int n;
    cin>>n;

    int l=0,r=1e9+10;
    int s=0;

    vector<int> q;

    while(n--)
    {
        int a,x;
        cin>>a>>x;

        if(a==1)    l=max(l,x);
        else if(a==2)   r=min(r,x);
        else q.push_back(x);
    }

    for(int e:q)
        if(e>=l&&e<=r)
            s++;
    
    cout<<max(0,r-l+1-s)<<endl;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t;
    cin>>t;

    while(t--)
        solve();

    return 0;
}

差不多是一模一样的代码,不知道原因出在哪里

#include

using namespace std;

const int N=110;

int q[N];

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int t;
	cin>>t;
	
	while(t--)
	{
		int n;
		cin>>n;
		
		int a,x;
		int max_temp=1e9+10;
		int min_temp=0;
		int num=0;
		int res=0;
		bool flag=true;
		
		while(n--)
		{
			cin>>a>>x;
			
			if(min_temp>max_temp)
			{
				res=0;
				flag=false;
				//break;
			}
			
			if(a==1&&flag==true)
			{
				if(x>min_temp)  min_temp=x;
			}
			else if(a==2&&flag==true)
			{
				if(x<max_temp)  max_temp=x;
			}
			else if(flag==true)
			{
				q[++num]=x;
			}
		}
		
		int ans=0;
		for(int i=1;i<=num;i++)
		{
			if(q[i]>=min_temp&&q[i]<=max_temp)
			{
				ans++;
			}
		}
		
//		puts("");
//		puts("ans:");
//		cout<
//		cout<
		
		//puts("");
		//puts("res:");
		if(flag) res=max_temp-min_temp+1-ans; 
		cout<<max(0,res)<<endl;
		//puts("");
		memset(q,0,sizeof q);
	}
	
	return 0;
}

第一份WA2的代码修改最后一行可以ac

#include

using namespace std;

void solve()
{
    int n;
    cin>>n;

    int l=0,r=1e9+10;
    vector<int> q;
    int s=0;

    while(n--)
    {
        int a,x;
        cin>>a>>x;

        if(a==1)    l=max(l,x);
        else if(a==2)   r=min(r,x);
        else q.push_back(x);
    }

    for(int e:q)
        if(e>=l&&e<=r)
            s++;

    int res=0;

    if(l>r) res=0;
    else    res=r-l+1-s;

    cout<<res<<endl;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t;
    cin>>t;

    while(t--)
        solve();

    return 0;
}

总之能过就行,用solve函数看起来会更加简洁

使用vectorpush_back()会缩短代码量,for(int e:q)更加简洁的遍历方式

你可能感兴趣的:(#,CF,div2,A题,算法)