表示只会水题,A,B,C;
题意为:两个朋友要见一面,然而两个任都各自有一个时间段有时间,其中在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;
}
题意:给出一个数组,看是否会出现一个数,使得出数组中的数对数组操作: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;
}
题意:有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;
}