基本全是水题
第一题水,不过有hack点,先增后不变再减
#include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #include<cassert> #include<iomanip> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define pi acos(-1) #define ll long long #define mod 1000000007 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 #pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const double g=10.0,eps=1e-9; const int N=100000+10,maxn=500+100,inf=0x3f3f3f; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin>>n; bool f=0; int last,bh=0; for(int i=0;i<n;i++) { int a; cin>>a; if(i==0)last=a; else { if(last<a) { if(bh==0)last=a; else if(bh==1)f=1; else f=1; } else if(last==a) { if(bh==0)bh=1,last=a; else if(bh==1)last=a; else f=1; } else if(last>a) { if(bh==0)bh=2,last=a; else if(bh==1)bh=2,last=a; else last=a; } } } if(f)cout<<"NO"<<endl; else cout<<"YES"<<endl; return 0; }
第二题更水,6分钟1a,maphash一下就行了
#include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #include<cassert> #include<iomanip> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define pi acos(-1) #define ll long long #define mod 1000000007 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 #pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const double g=10.0,eps=1e-9; const int N=100000+10,maxn=500+100,inf=0x3f3f3f; map<char,char>m; int main() { ios::sync_with_stdio(false); cin.tie(0); string s,p,t; cin>>s>>p>>t; for(int i=0;i<s.size();i++) { m[s[i]]=p[i]; } for(int i=0;i<t.size();i++) { if('a'<=t[i]&&t[i]<='z')cout<<m[t[i]]; else if('A'<=t[i]&&t[i]<='Z')cout<<(char)(m[t[i]-'A'+'a']+'A'-'a'); else cout<<t[i]; } cout<<endl; return 0; }
第三题想法题,先sort,然后找间距一一对应起来就可以 了(刚开始想的是求出值来,太蠢了)
#include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #include<cassert> #include<iomanip> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define pi acos(-1) #define ll long long #define mod 1000000007 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 #pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const double g=10.0,eps=1e-9; const int N=2000+10,maxn=500+100,inf=0x3f3f3f; ll a[N],b[N]; ll sum[N]; set<ll>ans; int main() { ios::sync_with_stdio(false); cin.tie(0); ll k,n; cin>>k>>n; for(ll i=0;i<k;i++) { cin>>a[i]; if(i==0)sum[i]=a[i]; else sum[i]=sum[i-1]+a[i]; } for(ll i=0;i<n;i++)cin>>b[i]; sort(b,b+n); sort(sum,sum+k); int p=b[0]; for(int i=0;i<n;i++)b[i]-=p; ll i=0; for(int i=0;i<k;i++) { int res=0,p=0; for(int j=i;j<k;j++) { if(sum[j]-sum[i]==b[p]) p++; if(p>=n) { ans.insert(sum[i]); break; } } } cout<<ans.size()<<endl; return 0; }
第四题,给一堆人,和一堆钥匙的坐标,每个人拿钥匙去办公室,求最小时间,sort一下,然后二分最小时间,每次判断的时候还是枚举两个数组进行匹配
#include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #include<cassert> #include<iomanip> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define pi acos(-1) #define ll long long #define mod 1000000007 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 #pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const double g=10.0,eps=1e-9; const int N=2000+10,maxn=500+100,inf=0x3f3f3f; ll a[N],b[N],p,n,k; bool ok(ll i,ll j,ll x) { return abs(a[i]-b[j])+abs(b[j]-p)<=x; } bool check(ll x) { ll j=0; for(int i=0;i<n;i++) { while(!ok(i,j,x)){ j++; } if(j>=k)return 0; j++; } return 1; } int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>k>>p; for(ll i=0;i<n;i++)cin>>a[i]; for(ll i=0;i<k;i++)cin>>b[i]; sort(a,a+n); sort(b,b+k); ll l=0,r=2e9+10; for(int i=0;i<100;i++) { ll m=(l+r)/2; if(check(m))r=m; else l=m; } while(check(l))l--; cout<<l+1<<endl; return 0; }
第5.6先留坑
话说这场只a了两题,还好比较稳,没被hack,还涨了85分>.<