A. 小斧头
#include <map> #include <set> #include <cmath> #include <queue> #include <stack> #include <cstdio> #include <vector> #include <climits> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #define inf 0x3f3f3f3f #define endl '\n' #define int long long using namespace std; const int N = 1e5 + 10, mod = 1e9 +7; //typedef long long ll; typedef pair<int,int> PII; //queue<PII> q1; map<vector<int>, int > mp; //priority_queue <int,vector<int>,greater<int> > q2; int n,m,t,k; /* */ int ans; void solve() { cin >> n; vector<int> a(n + 1), b(n + 1), c(n + 1),f(n + 1); for (int i = 1; i <=n ; ++i) { cin >> a[i]; } for (int i = 1; i <= n ; ++i) { cin >> b[i]; } for (int i = 1; i <= n ; ++i) { c[i] = max(a[i], b[i]); } stack<int> stk1, stk2; int lst; for (int i = 1; i <= n ; ++i) { while(!stk1.empty() && a[i] > c[stk1.top()]) stk1.pop(); while(!stk2.empty() && b[i] > c[stk2.top()]) stk2.pop(); if(b[i] >= a[i]){ if(stk2.empty()) lst = 0; else lst = stk2.top(); f[i] = f[lst] + i - lst; } else{ if(stk1.empty()) lst = 0; else lst = stk1.top(); f[i] = f[lst]; } ans += f[i]; stk1.push(i); stk2.push(i); } // for(auto i : f) // cout << i << ' '; // cout << endl; cout << ans << endl; return ; } signed main() { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int Ke_scholar = 1; //cin >> Ke_scholar ; while(Ke_scholar--) solve(); return 0; }
B. 能不能整除?
C. 又是一道构造题
#include <map> #include <set> #include <cmath> #include <queue> #include <cstdio> #include <vector> #include <climits> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #define inf 0x3f3f3f3f #define endl '\n' #define int long long using namespace std; const int N = 2e4 + 10, mod = 1e9 +7; //typedef long long ll; typedef pair<int,int> PII; //queue<PII> q1; map<vector<int>, int > mp; vector<int> a,b; //priority_queue <int,vector<int>,greater<int> > q2; int n,m,t,k; /* 2 4 5 20 12 27 15 6 30 45 4 3 6 5 2808 1 180 1980 1001 945 16632 630 1 23166 3900 */ int ans; void solve() { a.clear(); b.clear(); ans = 0; cin >> n >> m; vector<vector<int> > ma(n,vector<int>(m,0)); for(int i = 0;i < n; i++){ int x; cin >> x; a.push_back(x); } for(int i = 0;i < m;i ++){ int x; cin >> x; b.push_back(x); } auto g = a; auto gg = b; for(int i = 0;i < n;i ++){ for(int j = 0;j < m;j ++){ int x = __gcd(a[i],b[j]); a[i] /= x; b[j] /= x; ma[i][j] = x; } } for(int i = 0;i < n;i ++){ int c = 1; for(int j = 0;j < m;j ++){ c *= ma[i][j]; } if(c != g[i]){ cout << -1 << endl; return ; } } for(int i = 0;i < m;i ++){ int c = 1; for(int j = 0;j < n;j ++){ c *= ma[j][i]; } if(c != gg[i]){ cout << -1 << endl; return ; } } for(auto i : ma){ for(auto j : i){ cout << j << ' '; } cout << endl; } } signed main() { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int Ke_scholar = 1; cin >> Ke_scholar ; while(Ke_scholar--){ solve(); cout << endl; } return 0; }
标签:CAIP,int,SMU,stk2,long,lst,include,RoboCom,define From: https://www.cnblogs.com/Kescholar/p/17399141.html