admin管理员组

文章数量:1122850

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;
}

本文标签: Codeforces371 Abc