比赛链接:Educational Codeforces Round 53
显然连续两个不同字母就符合条件。
1 #include <set> 2 #include <map> 3 #include <queue> 4 #include <deque> 5 #include <stack> 6 #include <cmath> 7 #include <cstdio> 8 #include <vector> 9 #include <string> 10 #include <cstring> 11 #include <fstream> 12 #include <iostream> 13 #include <algorithm> 14 using namespace std; 15 16 #define eps 1e-8 17 #define pb push_back 18 #define PI acos(-1.0) 19 #define INF 0x3f3f3f3f 20 #define clr(a,b) memset(a,b,sizeof(a) 21 #define FAST_IO ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL) 22 23 typedef long long ll; 24 typedef unsigned long long ull; 25 map <char,int> m; 26 27 int main(){ 28 FAST_IO; 29 int n; 30 string s; 31 cin>>n; 32 cin>>s; 33 if(n==1){ 34 cout<<"NO"<<endl; 35 return 0; 36 } 37 for(int i=1;i<n;i++){ 38 if(s[i]!=s[i-1]){ 39 cout<<"YES"<<endl; 40 cout<<s[i-1]<<s[i]<<endl; 41 return 0; 42 } 43 } 44 cout<<"NO"<<endl; 45 return 0; 46 }
标记+模拟即可。
1 #include <set> 2 #include <map> 3 #include <queue> 4 #include <deque> 5 #include <stack> 6 #include <cmath> 7 #include <cstdio> 8 #include <vector> 9 #include <string> 10 #include <cstring> 11 #include <fstream> 12 #include <iostream> 13 #include <algorithm> 14 using namespace std; 15 16 #define eps 1e-8 17 #define pb push_back 18 #define PI acos(-1.0) 19 #define INF 0x3f3f3f3f 20 #define clr(a,b) memset(a,b,sizeof(a) 21 #define FAST_IO ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL) 22 23 const int N=3e5+10; 24 typedef long long ll; 25 typedef unsigned long long ull; 26 int a[N],b[N],vis[N]; 27 map <int,int> m; 28 29 int main(){ 30 FAST_IO; 31 int n; 32 cin>>n; 33 for(int i=1;i<=n;i++){ 34 cin>>a[i]; 35 m[a[i]]=i; 36 } 37 int pre=1; 38 for(int i=1;i<=n;i++) cin>>b[i]; 39 for(int i=1;i<=n;i++){ 40 if(vis[b[i]]){ 41 cout<<"0 "; 42 } 43 else{ 44 for(int j=pre;j<=m[b[i]];j++){ 45 vis[a[j]]=1; 46 } 47 cout<<m[b[i]]-pre+1<<" "; 48 pre=m[b[i]]+1; 49 } 50 } 51 return 0; 52 }
二分答案k,check主要就是遍历每一段长度k的情况,从原来删掉这段后的位置再提供k步,能否走到(x,y)判断下。
1 #include <set> 2 #include <map> 3 #include <queue> 4 #include <deque> 5 #include <stack> 6 #include <cmath> 7 #include <cstdio> 8 #include <vector> 9 #include <string> 10 #include <cstring> 11 #include <fstream> 12 #include <iostream> 13 #include <algorithm> 14 using namespace std; 15 16 #define eps 1e-8 17 #define pb push_back 18 #define PI acos(-1.0) 19 #define INF 0x3f3f3f3f 20 #define clr(a,b) memset(a,b,sizeof(a) 21 #define FAST_IO ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL) 22 23 const int N=2e5+10; 24 typedef long long ll; 25 typedef unsigned long long ull; 26 int c1,c2,n,x,y; 27 string s; 28 29 bool check(int k){ 30 int a1=0,a2=0,a3=0,a4=0; 31 for(int j=0;j<k-1;j++){ 32 if(s[j]=='U') a1++; 33 else if(s[j]=='D') a2++; 34 else if(s[j]=='L') a3++; 35 else if(s[j]=='R') a4++; 36 } 37 for(int i=0;i+k<=n;i++){ 38 if(s[i+k-1]=='U') a1++; 39 else if(s[i+k-1]=='D') a2++; 40 else if(s[i+k-1]=='L') a3++; 41 else if(s[i+k-1]=='R') a4++; 42 int C2=abs(c2+a1-a2); 43 int C1=abs(c1+a4-a3); 44 if(k>=(C1+C2)&&(k-C1-C2)%2==0) return true; 45 if(s[i]=='U') a1--; 46 else if(s[i]=='D') a2--; 47 else if(s[i]=='L') a3--; 48 else if(s[i]=='R') a4--; 49 } 50 return false; 51 } 52 53 int main(){ 54 FAST_IO; 55 cin>>n>>s>>x>>y; 56 int sx=0,sy=0; 57 for(int i=0;i<n;i++){ 58 if(s[i]=='U') sy++; 59 else if(s[i]=='D') sy--; 60 else if(s[i]=='L') sx--; 61 else if(s[i]=='R') sx++; 62 } 63 c1=x-sx;//>0 R <0 L 64 c2=y-sy;//>0 U <0 D 65 if(c1==0&&c2==0){ 66 cout<<0<<endl; 67 return 0; 68 } 69 int l=0,r=n+1,ans=-1; 70 while(l<=r){ 71 int mid=(l+r)/2; 72 if(check(mid)) r=mid-1,ans=mid; 73 else l=mid+1; 74 } 75 if(check(ans)) cout<<ans<<endl; 76 else cout<<-1<<endl; 77 return 0; 78 }
遍历,每次选中全部,判断小于t的能否整倍整倍除掉t,这段加速处理一下即可。
举个例子:ai 1 2 3 4 5 T=100。
第一次小于等于t的ai和为15,T能整倍除于6个。这样处理掉。 T=10
第二次小于等于t的ai和为15,T不能整除,那么就从头一个个遍历。直到t<mi(mi指的是最小的ai)
扫描二维码关注公众号,回复:
3730199 查看本文章
有点慌!(感觉会fst,明天起来再看!)
1 #include <set> 2 #include <map> 3 #include <queue> 4 #include <deque> 5 #include <stack> 6 #include <cmath> 7 #include <cstdio> 8 #include <vector> 9 #include <string> 10 #include <cstring> 11 #include <fstream> 12 #include <iostream> 13 #include <algorithm> 14 using namespace std; 15 16 #define eps 1e-8 17 #define pb push_back 18 #define PI acos(-1.0) 19 #define INF 0x3f3f3f3f 20 #define clr(a,b) memset(a,b,sizeof(a) 21 #define FAST_IO ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL) 22 23 const int N=5e5+10; 24 typedef long long ll; 25 typedef unsigned long long ull; 26 ll a[N],ans=0; 27 28 int main(){ 29 FAST_IO; 30 ll n,t,sum=0,cnt=0,x=0,mi=1e18; 31 cin>>n>>t; 32 for(int i=1;i<=n;i++) cin>>a[i],mi=min(mi,a[i]); 33 ll l=1; 34 while(1){ 35 if(l==1){ 36 sum=0;x=0; 37 for(int i=1;i<=n;i++){ 38 if(t>=a[i]) sum+=a[i],x++; 39 } 40 if(sum==0) break; 41 cnt=t/sum; 42 t-=cnt*sum; 43 ans+=cnt*x; 44 } 45 if(t<mi) break; 46 if(t>=a[l]) t-=a[l],ans++; 47 l++; 48 if(l==n+1) l=1; 49 } 50 cout<<ans<<endl; 51 return 0; 52 }