Educational Codeforces Round 53(A,B,C,D)

比赛链接:Educational Codeforces Round 53

A  Diverse Substring

显然连续两个不同字母就符合条件。          

 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 }
View Code   

B  Vasya and Books

标记+模拟即可。

 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 }
View Code

C  Vasya and Robot

二分答案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 }
View Code
D   Berland Fair

遍历,每次选中全部,判断小于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 }
View Code

猜你喜欢

转载自www.cnblogs.com/ehanla/p/9853827.html
今日推荐