#include <iostream>
using namespace std;
int main()
{
int r, y, g;
cin >> r >> y >> g;
int n;
cin >> n;
int sum = 0;
for(int i=0; i<n; i++){
int ta, tb;
cin >> ta >> tb;
if((ta == 0) || (ta == 1)){
sum += tb;
}
else if(ta == 2){
sum += (tb + r);
}
}
cout << sum << endl;
return 0;
}
2.
#include <iostream>
using namespace std;
int main()
{
int r, y, g;
cin >> r >> y >> g;
int s = r+y+g;
int n;
cin >> n;
int sum = 0;
int ta[n+5], tb[n+5];
for(int i=0; i<n; i++){
cin >> ta[i] >> tb[i];
}
for(int i=0; i<n; i++){
//on road
if((ta[i] == 0)){
sum += tb[i];
// cout << sum << endl;
}
//yellow light
else if(ta[i] == 2){
// cout << sum << endl;
int sum1 = sum%s;
sum1 += (g + y -tb[i]);
sum1 %= s;
// cout << "sum1:" << sum1 << endl;
if(sum1 >=0 && sum1 <g);
else sum += (s-sum1);
}
//red light
else if(ta[i] == 1){
// cout << sum << endl;
int sum1 = sum%s;
sum1 += (s-tb[i]);
sum1 %= s;
// cout << "sum1:" << sum1 << endl;
if(sum1 >=0 && sum1 <g);
else sum += (s-sum1);
}
else if(ta[i] == 3){
// cout << sum << endl;
int sum1 = sum%s;
sum1 += (g-tb[i]);
sum1 %= s;
// cout << "sum1:" << sum1 << endl;
int tmp = sum1-tb[i]-r-y;
if(sum1 >=0 && sum1 <g);
else sum += (s-sum1);
}
// cout << sum << endl;
}
cout << sum << endl;
return 0;
}
/*
//30 30 30 3 0 12 3 13 0 12 24
#include <iostream>
using namespace std;
int main()
{
int r, y, g;
cin >> r >> y >> g;
int s = r+y+g;
int n;
cin >> n;
int sum = 0;
int ta[n+5], tb[n+5];
for(int i=0; i<n; i++){
cin >> ta[i] >> tb[i];
}
for(int i=0; i<n; i++){
//on road
if((ta[i] == 0)){
sum += tb[i];
// cout << sum << endl;
}
//yellow light
else if(ta[i] == 2){
int sum1 = sum%s;
// cout << "sum1:" << sum1 << endl;
int tmp = sum1-tb[i]-r;
if(tmp < 0){
sum -= tmp;
}
// cout << sum << endl;
}
//red light
else if(ta[i] == 1){
int sum1 = sum%s;
// cout << "sum1:" << sum1 << endl;
int tmp = sum1-tb[i];
if(tmp < 0){
sum -= tmp;
}
}
else if(ta[i] == 3){
int sum1 = sum%s;
// cout << "sum1:" << sum1 << endl;
int tmp = sum1-tb[i]-r-y;
if(tmp < 0){
sum -= tmp;
}
// cout << sum << endl;
}
// cout << sum << endl;
}
cout << sum << endl;
return 0;
}
*/
4.
#include <iostream>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
typedef long long ll;
const int maxn = 100000+5;
struct Edge{
int a, b, va;
}E[maxn];
int n, r, m;
int fa[maxn], deep[maxn];
priority_queue<int>q;
bool cmp(Edge a, Edge b){
return a.va < b.va;
}
int find(int x){
return x == fa[x]? x : find(fa[x]);
}
void unite(int a, int b){
int faa = find(a);
int fbb = find(b);
if(faa == fbb)
return;
else{
if(deep[faa] < deep[fbb]){
fa[faa] = fbb;
}
if(deep[faa] > deep[fbb]){
fa[fbb] = faa;
}
else{
fa[fbb] = faa;
deep[faa]++;
}
}
}
void Kru(){
sort(E, E+r, cmp);
for(int i=0; i<=r; i++){
fa[i] = i;
deep[i] = 0;
}
for(int i=0; i<r; i++){
if(find(E[i].a) != find(E[i].b)){
unite(E[i].a, E[i].b);
q.push(E[i].va);
}
}
return;
}
int main()
{
int root;
cin >> n >> r >> root;
int dis[n+5][n+5];
for(int i=0; i<r; i++){
cin >> E[i].a >> E[i].b>> E[i].va;
dis[E[i].a][E[i].b] = E[i].va;
dis[E[i].b][E[i].a] = E[i].va;
}
Kru();
//adjust
int flag = 0;
while(!q.empty()){
int tmp = q.top();
for(int i=1; i<=n; i++){
if(dis[root][i] == tmp){
cout << tmp << endl;
flag = 1;
break;
}
}
if(flag){
break;
}
q.pop();
}
return 0;
}
CCF12月 1 . 2 4 分别是 100 60 0 ....
最新推荐文章于 2020-11-22 15:16:38 发布
本文介绍了一种使用C++实现的交通信号灯模拟算法,该算法考虑了红绿黄三色灯的切换逻辑,以及车辆通过路口的时间计算。通过对不同颜色信号灯的等待时间和通行时间的精确计算,模拟了真实世界中车辆在遇到不同交通信号时的行为。

630

被折叠的 条评论
为什么被折叠?



