Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- #define Pi 3.14
- struct comp{
- int d;
- int c;
- int vol;
- int partVol;
- };
- struct load{
- int t;
- int num;
- int weight;
- };
- int main()
- {
- int n, k, h, v, m, x;
- cin >> n >> m >> k >> h >> v;
- //отсеки
- vector <comp> compartsments;
- for (int i = 0; i < n; i++){
- comp z;
- cin >> x;
- z.d = x;
- cin >> x;
- z.c = x;
- z.vol = (Pi * z.d * z.d * z.c) / 4;
- z.partVol = 0;
- compartsments.push_back(z);
- }
- //плотности
- vector <int> density;
- for (int i = 0; i < m; i++){
- cin >> x;
- density.push_back(x);
- }
- //загрузка
- vector <load> loading;
- for (int i = 0; i < k; i++){
- load z;
- cin >> x;
- z.t = x;
- cin >> x;
- z.num = x;
- cin >> x;
- z.weight = x;
- loading.push_back(z);
- }
- sort(loading.begin(), loading.end(), [](const load &q, const load &w){return (q.t < w.t);});
- //вывод
- vector <vector<int>> answer;
- vector <int> layers;
- //работа трубопровода и печи
- int cnt = 0, nc = 0;//номер загрузки и самый верхний занятый отсек
- bool chek = true;
- int lastType = -1, level = 0;
- for (int i = 1; i <= 24; i++){
- if (loading[cnt].t == i){
- int V = loading[cnt].weight / density[loading[cnt].num - 1];
- while(1){
- if (compartsments[nc].vol - compartsments[nc].partVol < V){
- V = V - compartsments[nc].vol + compartsments[nc].partVol;
- compartsments[nc].partVol = compartsments[nc].vol;
- level+=compartsments[nc].c;
- nc++;
- }else{
- compartsments[nc].partVol += V;
- level += 4 * V / (Pi * compartsments[nc].d * compartsments[nc].d);
- break;
- }
- if (nc == n){
- chek = false;
- break;
- }
- }
- if (!chek)
- break;
- if (lastType != -1){
- if (lastType == loading[cnt].num)
- layers[layers.size() - 1] = level;
- else{
- layers.push_back(level);
- lastType = loading[cnt].num;
- }
- }else{
- lastType = loading[cnt].num;
- layers.push_back(level);
- }
- cnt++;
- }
- if (i % h == 0){
- int V = v;
- while(1){
- if (compartsments[nc].partVol < V){
- V = V - compartsments[nc].vol + compartsments[nc].partVol;
- compartsments[nc].partVol = 0;
- level-=compartsments[nc].c;
- nc--;
- layers.erase(layers.end() - 1);
- }else{
- compartsments[nc].partVol -= V;
- level -= 4 * V / (Pi * compartsments[nc].d * compartsments[nc].d);
- break;
- }
- if (nc == -1){
- break;
- }
- }
- }
- answer.push_back(layers);
- }
- if (!chek)
- cout << "NO";
- else{
- cout << "YES" << endl;
- for (auto i: answer){
- chek = false;
- for (auto j : i){
- cout << j << " ";
- chek = true;
- }
- if (!chek)
- cout << -1;
- cout << endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement