AtCoder Beginner Contest 352
A
easy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include<bits/stdc++.h> using namespace std; using ll=long long; #define rep(i,a,n) for(int i=a;i<=n;i++) #define frep(i,a,n) for(int i=a;i>=n;i--) #define int long long #define PII pair<int,int> #define lowbit(x) (x&(-x)) const int mod=1e9+7; const double pai=acos(-1.0); #define ios ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); const int N=1e6+100; #define LF(x) fixed<<setprecision(x) int a[N];
signed main() { int x,y,z,k; cin>>x>>y>>z>>k; if(y>z) { swap(y,z); } if(k>=y&&k<=z) { cout<<"Yes"<<'\n'; }else { cout<<"No"; } return 0; }
|
B
双指针 easy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| #include<bits/stdc++.h> using namespace std; using ll=long long; #define rep(i,a,n) for(int i=a;i<=n;i++) #define frep(i,a,n) for(int i=a;i>=n;i--) #define int long long #define PII pair<int,int> #define lowbit(x) (x&(-x)) const int mod=1e9+7; const double pai=acos(-1.0); #define ios ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); const int N=1e6+100; #define LF(x) fixed<<setprecision(x) int a[N];
signed main() { string s,x; cin>>s>>x; int n=s.length()-1; int m=x.length()-1; int i=0; int j=0; while(i<=n) { if(x[j]==s[i]) { i++; j++; cout<<j<<" "; } else { j++; } }
}
|
C
O(n)扫一遍,easy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include<bits/stdc++.h> using namespace std; using ll=long long; #define rep(i,a,n) for(int i=a;i<=n;i++) #define frep(i,a,n) for(int i=a;i>=n;i--) #define int long long #define PII pair<int,int> #define lowbit(x) (x&(-x)) const int mod=1e9+7; const double pai=acos(-1.0); #define ios ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); const int N=1e6+100; #define LF(x) fixed<<setprecision(x) int a[N]; int b[N]; int sum;
signed main() {
int n; cin>>n; rep(i,1,n) { cin>>a[i]>>b[i]; sum+=a[i]; } int ans=0; rep(i,1,n) { ans=max(sum-a[i]+b[i],ans); } cout<<ans;
}
|
D
注意到可以乱序,可以记录每个数字的下标,考虑用set维护,直接O(n)扫一遍
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include <bits/stdc++.h> using namespace std;
int n, k;
int main(){ cin >> n >> k; vector<int> q(n);
for(int i=0; i<n; i++){ int p; cin >> p; q[p-1] = i; } set<int> st; for(int i=0; i<k; i++){ st.insert(q[i]); }
int ans = *st.rbegin() - *st.begin(); for(int i=k; i<n; i++){ st.erase(q[i-k]); st.insert(q[i]); ans = min(ans, *st.rbegin() - *st.begin()); }
cout << ans << endl; return 0; }
|
E
板子题,不过存边需要一点注意,只需要存x-1条,不然会t,合理性自证。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #pragma GCC optimize(3,"Ofast","inline") #include<bits/stdc++.h> using namespace std; using ll=long long; int n,m,i,j,u,v,total; const int N=1e7+100; map<pair<int,int>,ll>mp; struct edge { int start; int to; ll val; }bian[N]; int f[N]; ll a[N]; long long ans; int cnt_; int find(int x) { if(f[x]==x) { return x; } else { return f[x]=find(f[x]); } } bool cmp(edge a,edge b) { return a.val<b.val; } void kruskal() { for(int i=1;i<=cnt_;i++) { u=find(bian[i].start); v=find(bian[i].to); if(u==v) { continue; } ans+=bian[i].val; f[u]=v; total++; if(total==n-1) { break; } } } signed main() { scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) { f[i]=i; } for(int i=1;i<=m;i++) { int x; ll w; scanf("%d %lld",&x,&w); for(int j=1;j<=x;j++) { scanf("%d",&a[j]); } for(int j=2;j<=x;j++) { if(!mp[make_pair(a[j],a[1])]) { bian[++cnt_].start=a[j]; bian[cnt_].to=a[1]; bian[cnt_].val=w; mp[make_pair(a[1],a[1])]=cnt_; } else { bian[mp[make_pair(a[j],a[1])]].val=min(bian[mp[make_pair(a[j],a[1])]].val,w); } } } sort(bian+1,bian+cnt_+1,cmp); kruskal(); if(total==n-1) { printf("%lld",ans); } else { printf("-1"); } }
|