cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, a, b;
cin >> n >> a >> b;
int res = 0;
while(n--){
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
if (x1 > a || y1 > b || x2 < 0 || y2 < 0)//要注意边界
continue;
int x = min(a, x2) - max(0, x1);
int y = min(b, y2) - max(0, y1);
res += x * y;
}
cout << res;
return 0;
}
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, m, k;
cin >> n >> m >> k;
int maxt = INT_MIN;
vector<vector<int>> vec(n,vector<int>(2,0));
vector<int> c(100001,0);//c[i]表示开垦时间为i天的土地全缩减耗时一天所需要的资源量
for(int i = 0; i < n; i++){
cin >> vec[i][0] >> vec[i][1];
c[vec[i][0]] += vec[i][1];
maxt = max(maxt, vec[i][0]);
}
int i;
for(i = maxt; i > k; i--){
if(m >= c[i]){
m -= c[i];
c[i - 1] += c[i];
}else{
cout << i;
break;
}
}
if(i == k)
cout << k;
return 0;
}
用数组存属性,70分
cpp
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> user(10000,vector<int>(10000, -1));
set<int> mset;
void caculate(string s,int n,set<int> &myset) {
if (s[0] == '&' || s[0] == '|') {
if (s[0] == '&') {
set<int> set1;
int i = 2;
int j = i, flag = 0;
while(s[j] != ')' || flag != 0){
if(s[j] == '('){
flag++;
}else if(flag && s[j] == ')')
flag--;
j++;
}
caculate(s.substr(i, j - i), n, set1);
set<int> set2;
i = j + 2;
j = i, flag = 0;
while(s[j] != ')' || flag != 0){
if(s[j] == '('){
flag++;
}else if(flag && s[j] == ')')
flag--;
j++;
}
caculate(s.substr(i, j - i), n, set2);
//取交集
set<int> intersection;
set_intersection(set1.begin(), set1.end(),
set2.begin(), set2.end(),
std::inserter(intersection, intersection.begin()));
myset = intersection;
} else if (s[0] == '|') {
set<int> set1;
int i = 2;
int j = i, flag = 0;
while(s[j] != ')' || flag != 0){
if(s[j] == '('){
flag++;
}else if(flag && s[j] == ')')
flag--;
j++;
}
caculate(s.substr(i, j - i), n, set1);
set<int> set2;
i = j + 2;
j = i, flag = 0;
while(s[j] != ')' || flag != 0){
if(s[j] == '('){
flag++;
}else if(flag && s[j] == ')')
flag--;
j++;
}
caculate(s.substr(i, j - i), n, set2);
//取并集
set<int> unionSet;
set_union(set1.begin(), set1.end(),
set2.begin(), set2.end(),
std::inserter(unionSet, unionSet.begin()));
myset = unionSet;
}
}else {
int t1 = s.find(':');
int t2 = s.find('~');
int t = t1 == -1 ? t2 : t1;
int a = stoi(s.substr(0,t));
int b = stoi(s.substr(t + 1));
if (s[t] == ':') {
for (int j = 0; j < n; j++) {
if (user[j][a] == b) {
myset.insert(user[j][0]);
}
}
} else if (s[t] == '~') {
for (int j = 0; j < n; j++) {
if (user[j][a] != b && user[j][a] > 0) {
myset.insert(user[j][0]);
}
}
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, m;
cin >> n;
for(int i = 0; i < n; i++){
cin >> user[i][0];
cin >> m;
while(m--){
int a, b;
cin >> a >> b;
user[i][a] = b;
}
}
cin >> m;
string s;
while(m--){
cin >> s;
mset.clear();
caculate(s,n,mset);
for(auto it : mset)
cout << it << " ";
cout << endl;
}
return 0;
}