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