A:给两个区间 (l1,r1) (l2,r2) 和一个数k,求区间交集,如果k在交集内,ans--;注意判断没有交集的情况输出0(被hack了,贼伤)
代码:
#include <bits/stdc++.h>
#define INF 0x3f3f3f
typedef long long ll;
using namespace std;
int main()
{
ll l1,l2,r1,r2,k;
while(cin>>l1>>r1>>l2>>r2>>k){
ll minn = min(r1,r2);
ll maxn = max(l1,l2);
ll ans = minn-maxn+1;
if(maxn > minn){
cout<<0<<endl;
continue;
}
if(k >= maxn && k <= minn)
ans--;
cout<<ans<<endl;
}
return 0;
}
B:给定n个数字,可以选择其中的一些数 +x 或者 -x,每个数只能操作一次。问是否经过操作之后可以使得这些数全部相等。
思路:先将数列去重排序,判断元素个数。如果 len > 3 ok = 0;len <= 2 ok = 1;len = 3,判断 两边的数和中间的数的差值是否相等。
代码:
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define N 100000+5
typedef long long ll;
using namespace std;
int a[N];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
while(cin>>n){
int ok = 1;
for(int i = 1;i <= n;++ i)
cin>>a[i];
sort(a+1,a+n+1);
int len = unique(a+1,a+n+1)-a;
len--;
if(len > 3)
ok = 0;
else{
if(len == 3){
if(abs(a[1]-a[2]) != abs(a[2]-a[3]))
ok = 0;
}
}
if(ok) cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
C:给定n个操作 op 以及操作的数字 res。op = + 表示集合内的 res+1。op = - 表示集合内的 res-1;op = ? 时给出一个字符串,问集合内有多少个元素与该字符串匹配(从右到左)。0表示匹配位置偶数,1表示匹配位置为奇数,长度不够的补0; 比如匹配串 : 0101,数字 323,3,23和匹配串匹配。
思路:考虑到0也是偶数,那么我们处理的时候不需要考虑两个串的长度问题了。将集合中的每个元素预处理为01串,利用 map 存储从左端开始的第一个为奇数也就是1的位置,比如预处理得到 0101,我们用 map 存储 101,及M["101"]++即可。
代码:
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define N 100005
typedef long long ll;
using namespace std;
map <string,int> M;
int fuc(string s,int flag){
string temp;
temp.resize(25);
int cur = -1,len = 0;
for(int i = 0;i < s.size();++ i){
if((s[i]-'0')%2 == 1){
cur = i;
break;
}
}
if(cur == -1)
temp = "0";
else{
for(int i = cur;i < s.size();++ i)
temp[len++] = (s[i]-'0')%2 == 1 ? '1' : '0';
}
if(flag == 1)
M[temp]++;
if(flag == 0)
M[temp]--;
if(flag == 2)
return M[temp];
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
while(cin>>n){
M.clear();
string op,s;
for(int i = 1;i <= n;++ i){
cin>>op>>s;
if(op[0] == '+')
fuc(s,1);
if(op[0] == '-')
fuc(s,0);
if(op[0] == '?'){
int ans = fuc(s,2);
cout<<ans<<endl;
}
}
}
return 0;
}