赞
踩
A. three swimmers
题目大意:有三个人游泳,他们到达岸边的时间分别是a,b,c的倍数,同时,你会在第p秒到达岸边,请问你到达岸边后最少过多长时间会遇到某个游泳的人?
解析:分两种情况,如果q可以被a,b,c整除,结果是0,如果不能整除,计算边界情况,语言无法表达。。。。。看代码
#include<bits/stdc++.h> using namespace std; int main(){ int t; cin>>t; while(t--){ long long int p,a[3]; cin>>p>>a[0]>>a[1]>>a[2]; long long int ans=1e18; for( int i=0;i<3;i++){ long long int temp=p/a[i]*a[i]; if(p%a[i]==0){ ans=0; break; } else{ ans=min(temp+a[i]-p,ans); } } cout<<ans<<endl; } }
B. Card Deck
题目大意:
解析:
贪心算法
#include<bits/stdc++.h> using namespace std; int a[100100]; int pos[100100];//储存数字的位置 int main(){ int t; cin>>t; while(t--){ int n; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; pos[a[i]]=i; } int p=n+1; for( int i=n;i>=1;i--){ if(pos[i]<p){ for( int j=pos[i];j<p;j++){ cout<<a[j]<<" "; } p=pos[i]; } } } }
C. Maximum width
题目大意:
现在有两个字符串,第一个字符串包含第二个字符串中的全部字符,求两个相邻字符之间的最大距离
解析:贪心算法,从正向和负向分别进行匹配,然后找差的最大值
#include<bits/stdc++.h> using namespace std; string a,b; int pos1[200010]; int pos2[200010]; int main(){ int la,lb; cin>>la>>lb; cin>>a>>b; int j=0; for( int i=0;i<la;i++){ if(a[i]==b[j]){ pos1[j]=i; j++; } if(j>=lb) break; } j=lb-1; for( int i=la-1;i>=0;i--){ if(a[i]==b[j]){ pos2[j]=i; j--; } if(j==-1) break; } int ans=0; for( int i=0;i<lb-1;i++){ ans=max(ans,pos2[i+1]-pos1[i]); } cout<<ans<<endl; }
D. Genius‘s Gambit
题目大意:
给定三个数a,b和k,要求找到两个数x和y,这两个数的二进制形式都包含a个0和b个1;如果将两个数相减,则x-y=z的二进制数含有k个1。请问是否存在这样的x和y?
题目解析:
先假设b=2的情况,然后在这个情况的基础上把0改为1;注意讨论特殊情况
#include<bits/stdc++.h> using namespace std; int rem[200100]; int main(){ int a,b,k; cin>>a>>b>>k;//a is the number of zeros ;b is the number of ones //最多凑出a+b-2个1 if(k>a+b-2&&k!=0){ cout<<"No"<<endl; return 0; } if(b==1&&k!=0||a==0&&k!=0) { cout<<"No"<<endl; return 0; } if(k==0){ cout<<"yes"<<endl; for( int i=1;i<=b;i++) cout<<1; for( int i=1;i<=a;i++) cout<<0; cout<<endl; for( int i=1;i<=b;i++) cout<<1; for( int i=1;i<=a;i++) cout<<0; cout<<endl; return 0; } else { cout<<"Yes"<<endl; cout<<11; int temp=b-2; for( int i=1;i<=k-1;i++){ if(temp>0) { cout<<1; temp--; } else cout<<0; } cout<<0; for( int i=1;i<=a+b-k-2;i++){ if(temp>0){ cout<<1; temp--; } else cout<<0; } cout<<endl; cout<<10; temp=b-2; for( int i=1;i<=k-1;i++){ if(temp>0){ cout<<1; temp--; } else cout<<0; } cout<<1; for( int i=1;i<=a+b-k-2;i++){ if(temp>0){ cout<<1; temp--; } else cout<<0; } cout<<endl; } }
E.Almost Fault-Tolerant Database
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。