11 条题解
-
2曾扬洋 (2022ts280) LV 9 @ 2023-5-7 18:04:13
#include <iostream> #include <set> #include <map> using namespace std; map <pair<int,int>,bool> existed; int height[10001]; int main() { int n,r,i,h; cin>>n>>i>>h>>r; height[1]=h; for(int i=0;i<r;i++) { int x,y; cin>>x>>y; if(x>y) { swap(x,y); // cout<<x<<" "<<y<<endl; } if(!existed[make_pair(x,y)]) { existed[make_pair(x,y)] = 1; height[x+1] --; height[y]++; } } for(int i=1;i<=n;i++) { height[i] += height[i-1]; cout<<height[i]<<endl; } return 0; }
-
22023-5-5 19:23:31@
题意:让牛的身高尽可能大
思路:首先我们肯定是由最高的那头牛来推出其他牛,身高为了保证尽可能高,所以我们让身高每次减一,每对关系其实说明一个事情,那对关系中间的牛都要比这两个牛矮
思路一:
我们可以把所有牛初始身高设为h,然后每给一对关系我们都区间-1,最后得出答案
思路二
我们差分算区间-1,然后最后把差值加上h就是答案
#include<bits/stdc++.h> #define maxn 100005 #define mod 1000000007 using namespace std; typedef long long ll; struct sss { int x,y; }a[maxn]; ll n,p,h,m,num,d[maxn]; map<ll,ll> mp[10005]; ll c[maxn]; int main() { cin>>n>>p>>h>>m; ll x,y; for(int i=0;i<m;i++){ cin>>x>>y; if(mp[x][y]||mp[y][x]) continue; if(x>y){ int t=x; x=y; y=t; } a[num].x=x; a[num++].y=y; mp[x][y]=1; mp[y][x]=1; } for(int i=0;i<num;i++){ d[a[i].x+1]--; d[a[i].y]++; } for(int i=1;i<=n;i++){ c[i]=c[i-1]+d[i]; cout<<c[i]+h<<"\n"; } }
-
02023-12-24 18:29:35@
1
-
02023-12-24 18:21:23@
#include<iostream> using namespace std; const int N=1e5+10; int n,p,h,m,a[N],x,y; int main(){ cin>>n>>p>>h>>m; for(int i=1;i<=n;i++)a[i]=h; while(m--){ cin>>x>>y; if(x>y)swap(x,y); if(x+1==y)continue; int k=min(a[x],a[y]); bool flag=false; for(int i=x+1;i<=y-1;i++) if(a[i]>=k){ flag=true; break; } if(flag) for(int i=x+1;i<=y-1;i++)a[i]--; } for(int i=1;i<=n;i++)cout<<a[i]<<"\n"; return 0; }
-
02023-12-24 18:20:46@
#include<iostream> using namespace std; const int N=1e5+10; int n,p,h,m,a[N],x,y; int main(){ cin>>n>>p>>h>>m; for(int i=1;i<=n;i++)a[i]=h; while(m--){ cin>>x>>y; if(x>y)swap(x,y); if(x+1==y)continue; int k=min(a[x],a[y]); bool flag=false; for(int i=x+1;i<=y-1;i++) if(a[i]>=k){ flag=true; break; } if(flag) for(int i=x+1;i<=y-1;i++)a[i]--; } for(int i=1;i<=n;i++)cout<<a[i]<<"\n"; return 0; }
-
02023-12-24 18:20:01@
int n,p,h,m,a[N],x,y; int main(){cin>>n>>p>>h>>m; for(int i=1;i<=n;i++)a[i]=h; while(m--){ cin>>x>>y; if(x>y)swap(x,y); if(x+1==y)continue; int k=min(a[x],a[y]); bool flag=false; for(int i=x+1;i<=y-1;i++) return 0; } ```
-
02023-12-24 18:16:41@
#include<iostream> using namespace std; const int N=1e5+10; int n,p,h,m,a[N],x,y; int main(){ cin>>n>>p>>h>>m; for(int i=1;i<=n;i++)a[i]=h; while(m--){ cin>>x>>y; if(x>y)swap(x,y); if(x+1==y)continue; int k=min(a[x],a[y]); bool flag=false; for(int i=x+1;i<=y-1;i++) if(a[i]>=k){ flag=true; break; } if(flag) for(int i=x+1;i<=y-1;i++)a[i]--; for(int i=1;i<=n;i++)cout<<a[i]<<"\n"; return 0; }
-
02023-12-24 9:49:45@
#include <queue> #include <math.h> #include <stack> #include <stdio.h> #include <iostream> #include <vector> #include <iomanip> #include <string.h> #include <algorithm> using namespace std; #define LL long long const int N = 1e4 + 10; const int INF = 0x3f3f3f3f; int n,p,h,m,x,y; bool v[N][N]; int cf[N],a[N]; int main() { cin>>n>>p>>h>>m; while(m--) { cin>>x>>y; if(v[x][y]) continue; if(x>y) swap(x,y); cf[x+1]--; cf[y]++; v[x][y]=1; } for(int i=1;i<=n;i++) { a[i]=a[i-1]+cf[i]; cout<<a[i]+h<<endl; }
return 0;
}
-
02023-12-20 20:13:18@
#include<bits/stdc++.h> using namespace std; const int N=1e4+10; const int INF=0x3f3f3f3f; bool v[N][N]; int n,p,h,m,a[N],cf[N],x,y; int main(){ cin>>n>>p>>h>>m; while(m--){ cin>>x>>y; if(x>y) swap(x,y); if(v[x][y]){ continue; } cf[x+1]--; cf[y]++; v[x][y]=1; } for(int i=1;i<=n;i++){ a[i]=a[i-1]+cf[i]; cout<<a[i]+h<<endl; } return 0; }
-
02023-12-20 19:46:17@
#include<bits/stdc++.h> using namespace std; const int N=1e4+10; const int INF=0x3f3f3f3f; bool v[N][N]; int n,p,h,m,a[N],cf[N],x,y; int main(){ cin>>n>>p>>h>>m; while(m--){ cin>>x>>y; if(x>y) swap(x,y); if(v[x][y]){ continue;
} cf[x+1]--; cf[y]++; v[x][y]=1; } for(int i=1;i<=n;i++){ a[i]=a[i-1]+cf[i]; cout<<a[i]+h<<endl; } return 0;
}
-
02023-12-18 17:20:33@
凑个热闹
#include<iostream> using namespace std; const int N=1e5+10; int n,p,h,m,a[N],x,y; int main(){ cin>>n>>p>>h>>m; for(int i=1;i<=n;i++)a[i]=h; while(m--){ cin>>x>>y; if(x>y)swap(x,y);//小在前大在后 if(x+1==y)continue;//相邻的直接跳过 int k=min(a[x],a[y]); bool flag=false;//是否见不到对方 for(int i=x+1;i<=y-1;i++) if(a[i]>=k){ flag=true; break; } if(flag) for(int i=x+1;i<=y-1;i++)a[i]--;区间减1 } for(int i=1;i<=n;i++)cout<<a[i]<<"\n"; return 0; }
- 1
信息
- ID
- 13
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 379
- 已通过
- 169
- 上传者