Codeforces 371 A,B,C


表示只会水题,A,B,C;大哭


Meeting of Old Friends



题意为:两个朋友要见一面,然而两个任都各自有一个时间段有时间,其中在K这个时间点不行,问:他俩见面的时间最长事多少?</p><p></p><p>思路: 区间为[  max( l1 , l2 ) , min( r1 ,r2 )  ],不过要判断一下这个区间是否成立,即前面的是不是比后面的小;      之后判断一下k是否在这个区间内:


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

typedef __int64 ll;

int main()
{
   ll a,b,c,d,k;
   while( ~ scanf("%I64d%I64d%I64d%I64d%I64d", &a, &b, &c, &d, &k))
   {
       ll x = max(a,c);
       ll y = min(b,d);
       if(y < x)
       {
           cout<<0<<endl;
           continue;
       }
       if(k >= x && k <= y)
        cout<< y - x<<endl;
       else cout<<y - x +1<<endl;
   }
   return 0;
}



B. Filya and Homework


题意:给出一个数组,看是否会出现一个数,使得出数组中的数对数组操作:1加上这个数,2减去这个数,3不变;最后使得这个数组中的数都相同:


思路:因为是三种操作,说明如果成立的话,数组中的种数不能大于3,然后如果种数小于3 的话,肯定成立;等于三的情况的话就要符合等差数列的三个数了;


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

typedef __int64 ll;

const int maxn = 100000 + 10;
ll a[maxn];

int main()
{
   ll n;
   while( ~ scanf("%I64d", &n))
   {
       set<ll>s;
       for(int i =0 ;i < n ;i ++)
       {
           scanf("%I64d", &a[i]);
           s.insert(a[i]);
       }

       if(s.size() < 3)
        cout<<"YES"<<endl;
       else if(s.size() > 3)
       cout<<"NO"<<endl;
       else
       {
           set<ll> :: iterator it;
           ll i =0;
           ll x= 0,y =0;
           for(it = s.begin() ; it != s.end(); it ++, i ++)
           {
               if(i==0 || i == 2)
                x += *it;
               else y = *it;
           }

           if(x == y * 2)
            cout<<"YES"<<endl;
           else cout<<"NO"<<endl;
       }
   }
   return 0;
}



C Sonya and Queries


题意:有n项操作,“ + ”代表的是加入到队列中,“-”表示减去一次,“?”问的是符合“?”后面的数符合的形式有多少个,输出!符合的形式的就是数的位数是奇数,则为1,是偶数,则为0;

思路:输入的时候直接预处理一下,全都转换成01的形式:


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

typedef __int64 ll;

int main()
{
   int n;
   while( ~ scanf("%d", &n) )
   {
       map<ll,ll>m;

       for(int ii = 1; ii <= n ;ii ++)
       {
           char s[100];
           ll x;
           scanf("%s%I64d", s,&x);
           ll ans =0,t = 1;
           while(x)
           {
               ans += (x %10 %2) * t;
               t = t *10;
               x = x /10;
           }
           if(s[0] == '+')
            m[ans] ++;
           else if(s[0] == '-')
           m[ans] --;
           else
           {
               cout<<m[ans]<<endl;
           }
       }
   }
   return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值