#include<iostream>usingnamespace std;intmain(){int n, p;
cin >> n >> p;
cout <<(n *3+ p)/2<< endl;return0;}
#include<iostream>#include<algorithm>usingnamespace std;constint N =110;structNode{
string id;int score;int num;}e[N];int n;intmain(){
cin >> n;for(int i =0;i < n ;i ++){
cin >> e[i].id >> e[i].score;
e[i].num = i +1;}auto cmp =[&](structNode x,structNode y){
string a = x.id, b = y.id;for(int i =0;i <max((int)a.size(),(int)b.size()); i ++)if(a[i]!= b[i])return a[i]< b[i];};sort(e, e + n,[&](structNode&v1,structNode&v2){if(v1.id != v2.id)returncmp(v1, v2);else{//cout << v1.score << " " << v2.score << endl;return v1.score > v2.score;//return v2.score > v1.score;}});for(int i =0;i < n ;i ++) cout << e[i].num << endl;return0;}
#include<iostream>#include<algorithm>usingnamespace std;constint N =15;int n, m, k[N];int p[N], s[N][N];int state[N], res;// m * k --> m * nvoidcheck(){bool flag =true;for(int j =1; j <= m ; j ++)//每个灯泡{int cnt =0;for(int u =1; u <= k[j]; u ++)//依赖的开关if(state[s[j][u]]==2)
cnt ++;if(cnt %2!= p[j]) flag =false;}if(flag) res ++;}// 2 * n * (n - 1) * (n - 2) * .... -- > O(!n)voiddfs(int u){if(u == n +1){check();return;}for(int i =1; i <=2; i ++)//堆空间的数组默认初始化为0, 1 表示“off” 2 表示"on"{
state[u]= i;dfs(u +1);}}// O(!n * n * m) --> !10 * 10 * 10intmain(){
cin >> n >> m;for(int i =1; i <= m ;i ++){
cin >> k[i];for(int j =1; j <= k[i]; j ++) cin >> s[i][j];}for(int i =1; i <= m ;i ++) cin >> p[i];dfs(1);//枚举所有开关的每个状态
cout << res << endl;return0;}
#include<iostream>#include<algorithm>usingnamespace std;constint N =15;int n, m, k[N];int p[N], s[N][N];intmain(){
cin >> n >> m;for(int i =0;i < m ;i ++){
cin >> k[i];for(int j =0; j < k[i];j ++){int x;
cin >> x;
s[i][j]=--x;}}for(int i =0; i < m; i ++) cin >> p[i];int res =0;for(int i =0;i <(1<< n); i ++)//枚举开关的所有情况{bool flag =true;for(int j =0; j < m ;j ++)//每个灯泡做一遍{int cnt =0;for(int u =0; u < k[j]; u ++)//遍历每个灯泡对应的开关
cnt +=(i >> s[j][u]&1);if(cnt %2!= p[j]) flag =false;}if(flag) res ++;}
cout << res << endl;return0;}
#include<iostream>#include<cstring>#include<queue>usingnamespace std;constint N =55;int n, m, a[N];intmain(){
cin >> n >> m;for(int i =1;i <= n ;i ++) cin >> a[i];int ans =0;for(int i =0; i <= n ;i ++)//i 表示在左边取几个数{for(int j =0; j + i <= n ;j ++)//j 表示在右边取几个数{int res =0;if(i + j > m)continue;//可行性剪枝,hhhint k = m - i - j;//可以将负数拿出去的操作次数//这里为了方便,定义一个优先队列,优先拿出最小的负数
priority_queue<int, vector<int>, greater<int>> q;for(int x =1; x <= i ; x ++) q.push(a[x]), res += a[x];for(int x = n; x >= n - j +1; x --) q.push(a[x]), res += a[x];while(q.size()&& q.top()<0&& k >0)
res -= q.top(), q.pop(), k --;
ans =max(res, ans);}}
cout << ans << endl;return0;}
#include<iostream>#include<map>#include<cstring>#include<algorithm>#include<set>#include<vector>usingnamespace std;constint N =2E5+10;int n, m;structNode{int s, t, x;booloperator<(structNode& v){return x < v.x;}}e[N];int a[N];int res[N];
map<int,int> pos;intmain(){
cin >> n >> m;for(int i =1; i <= n ;i ++){
cin >> e[i].s >> e[i].t >> e[i].x;
e[i].s -= e[i].x;
e[i].t -= e[i].x;
e[i].s =max(e[i].s,0);
e[i].t =max(e[i].t,0);}memset(res,-1,sizeof res);for(int i =1;i <= m ;i ++) cin >> a[i], pos[a[i]]= i;sort(e +1, e +1+ n);
set<int> s;for(int i =1;i <= m ;i ++) s.insert(a[i]);for(int i =1; i <= n ; i ++){auto l = s.lower_bound(e[i].s);auto r = s.lower_bound(e[i].t);
vector<int> q;for(auto j = l; j != r; j ++){
res[pos[*j]]= e[i].x;
q.push_back(*j);}for(auto x : q) s.erase(x);}for(int i =1; i <= m ;i ++) cout << res[i]<< endl;return0;}