暑假训练赛
A......找ABC就行了
第五次比赛 - Virtual Judge (vjudge.net)
#include <bits/stdc++.h> #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <cmath> //#define int long long using namespace std; const int N=2e5+5; int vis[N]; int32_t main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int n; cin>>n; string s; cin>>s; int ans=0; for(int i=0;i<n;i++) { if(s[i]=='A'&&vis['A']!=1) { ans++; vis['A']=1; } if(s[i]=='B'&&vis['B']!=1) { ans++; vis['B']=1; } if(s[i]=='C'&&vis['C']!=1) { ans++; vis['C']=1; } if(ans==3) { cout<<i+1; break; } } return 0; }
B......结构体排序,注意读题,读假题直接废
第一个条件就是 1价格要是小的
2功能要是对方的有的全部
坑点就是第三条,要么价格小于并且功能数相等,如果两个价格等于那么你的功能数就要大于它
#include <bits/stdc++.h> #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <cmath> #define int long long using namespace std; const int N=100+7; struct G{ int p; int c; int a[N]; }s[N]; bool cmp(G x,G y){ if(x.p==y.p) { return x.c>y.c; } return x.p<y.p; } int32_t main() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) { cin>>s[i].p >> s[i].c; for(int j=1;j<=s[i].c;j++) { int b; cin>>b; s[i].a[b]=1; } } sort(s+1,s+n+1,cmp); int f=0; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { if((s[i].c==s[j].c&&s[i].p<s[j].p)||(s[i].c>s[j].c&&s[i].p<=s[j].p)) { int ans=0; for(int k=1;k<=m;k++) { if(s[j].a[k]==1&&s[i].a[k]==1) { ans++; } } if(ans==s[j].c) { f=1; break; } } else { continue; } } } if(f) { cout<<"Yes"; } else { cout<<"No"; } return 0; }
C 题意就是找全部人都有空的连续的天数
直接一列列的跑就行
#include <bits/stdc++.h> #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <cmath> //#define int long long using namespace std; const int N=1000+5; int vis[N]; char a[N][N]; int32_t main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int n,d; cin>>n>>d; for(int i=1;i<=n;i++) { for(int j=1;j<=d;j++) { cin>>a[i][j]; } } int ans=0; int ma=0; for(int i=1;i<=d;i++) { int sum=0; for(int j=1;j<=n;j++) { if(a[j][i]=='x') { ans=0; sum=0; break; } else { sum++; } } if(sum==n) { ans++; } ma=max(ans,ma); } cout<<ma; return 0; }
D 一道简单的字符串反转
TLE暴力写法
#include <bits/stdc++.h> #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <cmath> #define int long long using namespace std; const int N=2e5+7; const int INF = 0x3f3f3f3f; const int mod=998244353; double h,c; double T; string a[N]; int vis[N]; int32_t main() { ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } int ans=1; vis[1]=1; for(int i=1;i<=n;i++) { if(!vis[i]) ans++; for(int j=i+1;j<=n;j++) { string s=a[i]; reverse(a[i].begin(),a[i].end()); if(a[j]==s || a[j]==a[i]) { vis[j]=1; } } } cout<<ans<<endl; return 0; }
换掉一个循环
#include <bits/stdc++.h> #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <cmath> #define int long long using namespace std; const int N=2e5+7; const int INF = 0x3f3f3f3f; const int mod=998244353; double h,c; double T; string a[N]; set<string> l; int32_t main() { ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } for(int i=1;i<=n;i++) { string s=a[i]; reverse(a[i].begin(),a[i].end()); l.insert(min(s,a[i])); } cout<<l.size()<<endl; return 0; }
E 题意就是找环然后在输出相应顺序的环就行了
跑一遍环,一旦发现重复就立刻跳出,然后do从环的起点一个个跑出来就行了
#include <bits/stdc++.h> #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <cmath> //#define int long long using namespace std; const int N=2e5+5; int a[N]; int b[N]; int vis[N]; int32_t main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } int k=1; while (!vis[k]) { vis[k]= 1; k=a[k]; } int j=k; vector<int> q; do { q.push_back(a[j]); j=a[j]; } while (j!=k); cout<<q.size()<<"\n"; for(auto l : q) { cout<< l <<" "; } return 0; }
F 模板广搜,一个点狂搜,然后在标记就行了
#include <bits/stdc++.h> #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <cmath> //#define int long long using namespace std; const int N=200+7; int n,m; char a[N][N]; int ans=0; int b[N][N]; bool vis[N][N]; int dx[] = {0,0,-1,1}; int dy[] = {-1,1,0,0}; struct G{ int x,y; }k; void dfs() { k.x=2,k.y=2; vis[k.x][k.y]= true; b[k.x][k.y]=1; queue<G> q; q.push(k); while (!q.empty()) { G mo = q.front(); q.pop(); for(int i=0;i<4;i++) { int xx,yy; xx=mo.x; yy=mo.y; while (a[xx][yy]=='.') { b[xx][yy]=1; xx+=dx[i]; yy+=dy[i]; } xx-=dx[i]; yy-=dy[i]; if(!vis[xx][yy]) { vis[xx][yy]= true; q.push({xx,yy}); } } } } int32_t main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>a[i][j]; } } dfs(); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(b[i][j]) ans++; } } cout<<ans; return 0; }