首页 > 其他分享 >AtCoder Beginner Contest 308

AtCoder Beginner Contest 308

时间:2023-07-02 09:22:19浏览次数:47  
标签:308 AtCoder const Beginner int double tie include define

A:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<iostream>
 5 #include<string>
 6 #include<vector>
 7 #include<stack>
 8 #include<bitset>
 9 #include<cstdlib>
10 #include<cmath>
11 #include<set>
12 #include<list>
13 #include<deque>
14 #include<map>
15 #include<queue>
16 #include <iomanip>
17 #include<ctime>
18 using namespace std;
19 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
20 #define TLE (double)clock()/CLOCKS_PER_SEC<=0.95
21 #define int long long 
22 #define double long double
23 #define endl '\n'
24 #define inf LLONG_MAX
25 #define iinf INT_MAX
26 typedef pair<int,int> PII;
27 const double PI = acos(-1.0);
28 const double eps = 1e-6;
29 const int INF = 0x3f3f3f3f;
30 const int N = 20;
31 int a[N];
32 signed main()
33 {
34     IOS;
35     for(int i=1;i<=8;i++)
36     {
37         cin>>a[i];
38     }
39     bool flag=true;
40     for(int i=1;i<8;i++)
41     {
42         if(a[i]>a[i+1])
43         {
44             cout<<"No"<<endl;
45             return 0;
46         }
47     }
48     for(int i=1;i<=8;i++)
49     {
50         if(a[i]>=100&&a[i]<=675&&a[i]%25==0)
51         {
52             flag=true;
53         }
54         else
55         {
56             flag=false;
57             break;
58         }
59     }
60     if(flag)    cout<<"Yes"<<endl;
61     else cout<<"No"<<endl;
62     return 0;
63 }

B:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<iostream>
 5 #include<string>
 6 #include<vector>
 7 #include<stack>
 8 #include<bitset>
 9 #include<cstdlib>
10 #include<cmath>
11 #include<set>
12 #include<list>
13 #include<deque>
14 #include<map>
15 #include<queue>
16 #include <iomanip>
17 #include<ctime>
18 using namespace std;
19 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
20 #define TLE (double)clock()/CLOCKS_PER_SEC<=0.95
21 #define int long long 
22 #define double long double
23 #define endl '\n'
24 #define inf LLONG_MAX
25 #define iinf INT_MAX
26 typedef pair<int,int> PII;
27 const double PI = acos(-1.0);
28 const double eps = 1e-6;
29 const int INF = 0x3f3f3f3f;
30 const int N = 1e2+10;
31 string s[N];
32 int n,m;
33 string d[N];
34 map<string,int>mp;
35 bool is_find(string tmp)
36 {
37     for(int i=1;i<=m;i++)
38     {
39         if(d[i]==tmp)
40         return true;
41     }
42     return false;
43 }
44 signed main()
45 {
46     IOS;
47     cin>>n>>m;
48     int p0;
49     for(int i=1;i<=n;i++)
50     {
51         cin>>s[i];
52     }
53     for(int i=1;i<=m;i++)
54     {
55         cin>>d[i];
56     }
57     cin>>p0;
58     int t;
59     for(int i=1;i<=m;i++)
60     {
61         cin>>t;
62         mp[d[i]]=t;
63     }
64     int sum=0;
65     for(int i=1;i<=n;i++)
66     {
67         if(is_find(s[i]))
68         {
69             sum+=mp[s[i]];
70         }
71         else
72         {
73             sum+=p0;
74         }
75     }
76     cout<<sum<<endl;
77     return 0;
78 }

C:浮点数存储然后排个序

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<iostream>
 5 #include<string>
 6 #include<vector>
 7 #include<stack>
 8 #include<bitset>
 9 #include<cstdlib>
10 #include<cmath>
11 #include<set>
12 #include<list>
13 #include<deque>
14 #include<map>
15 #include<queue>
16 #include <iomanip>
17 #include<ctime>
18 using namespace std;
19 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
20 #define TLE (double)clock()/CLOCKS_PER_SEC<=0.95
21 #define int long long 
22 #define double long double
23 #define endl '\n'
24 #define inf LLONG_MAX
25 #define iinf INT_MAX
26 typedef pair<double,int> PII;
27 const double PI = acos(-1.0);
28 const double eps = 1e-6;
29 const int INF = 0x3f3f3f3f;
30 const int N = 2e5+10;
31 int n;
32 struct node
33 {
34     double f;
35     int id;
36 }a[N];
37 bool cmp(node b,node c)
38 {
39     if(b.f!=c.f)
40     {
41         return b.f>c.f;
42     }
43     else
44     {
45         return b.id<c.id;
46     }
47 }
48 signed main()
49 {
50     IOS;
51     double h,t;
52     cin>>n;
53     for(int i=1;i<=n;i++)
54     {
55         a[i].id=i;
56         cin>>h>>t;
57         a[i].f=h/(h+t);
58     }
59     sort(a+1,a+1+n,cmp);
60     for(int i=1;i<=n;i++)
61     {
62         cout<<a[i].id<<" ";
63     }
64     return 0;
65 }

D:从(1,1)走到(n,m),保证此条路径上的字符串序列为

且行走的轨迹只能移动到相邻的格子

 

走的时候利用前驱后继思想就能解决这个问题,根本用不到一点回溯,最后检查一下最后一个格子被访问了没有即可

  1 //中心思想就是根据当前找前驱,不需要回溯
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<algorithm>
  5 #include<iostream>
  6 #include<string>
  7 #include<vector>
  8 #include<stack>
  9 #include<bitset>
 10 #include<cstdlib>
 11 #include<cmath>
 12 #include<set>
 13 #include<list>
 14 #include<deque>
 15 #include<map>
 16 #include<queue>
 17 #include <iomanip>
 18 #include<ctime>
 19 using namespace std;
 20 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
 21 #define TLE (double)clock()/CLOCKS_PER_SEC<=0.95
 22 #define int long long 
 23 #define double long double
 24 #define endl '\n'
 25 #define inf LLONG_MAX
 26 #define iinf INT_MAX
 27 typedef pair<int,int> PII;
 28 const double PI = acos(-1.0);
 29 const double eps = 1e-6;
 30 const int INF = 0x3f3f3f3f;
 31 const int N = 5e2+10;
 32 char ch[N][N];
 33 int n,m;
 34 int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
 35 bool flag;
 36 string s="snuke";
 37 bool vis[N][N];
 38 // bool check(int x,int y,int k)
 39 // {
 40     // if(ch[x][y]==s[(k-1)%5+1])    return true;
 41     // else    return false;
 42 // }
 43 vector<char>nxt(N);
 44 void init()
 45 {
 46     nxt['s'] = 'n';
 47     nxt['n'] = 'u';
 48     nxt['u'] = 'k';
 49     nxt['k'] = 'e';
 50     nxt['e'] = 's';
 51 }
 52 // void dfs(int x,int y)//dfs版本
 53 // {
 54     // vis[x][y]=true;
 55     // for(int i=0;i<4;i++)
 56     // {
 57         // int nx=x+dx[i];
 58         // int ny=y+dy[i];
 59         // if(nx<0||nx>=n||ny<0||ny>=m)    continue;
 60         // if(ch[nx][ny]!=nxt[ch[x][y]])    continue;
 61         // if(vis[nx][ny])    continue;
 62         // dfs(nx,ny);
 63     // }
 64 // }
 65 void bfs(int x,int y)//bfs版本
 66 {
 67     queue<PII>q;
 68     vis[x][y]=true;
 69     q.push({x,y});
 70     while(!q.empty())
 71     {
 72         int tx=q.front().first;
 73         int ty=q.front().second;
 74         q.pop();
 75         // if(tx==n-1&&ty==m-1)
 76         // {
 77             // flag=true;
 78             // return ;
 79         // }
 80         for(int i=0;i<4;i++)
 81         {
 82             int nx=tx+dx[i];
 83             int ny=ty+dy[i];
 84             if(nx<0||nx>=n||ny<0||ny>=m)    continue;
 85             if(ch[nx][ny]!=nxt[ch[tx][ty]])    continue;
 86             if(vis[nx][ny])    continue;
 87             vis[nx][ny]=true;
 88             q.push({nx,ny});
 89         }
 90     }
 91 }
 92 signed main()
 93 {
 94     IOS;
 95     cin>>n>>m;
 96     for(int i=0;i<n;i++)
 97     {
 98         for(int j=0;j<m;j++)
 99         {
100             cin>>ch[i][j];
101         }
102     }
103     if(ch[0][0]!='s')
104     {
105         cout<<"No"<<endl;
106         return 0;
107     }
108     init();
109     //dfs(0,0);
110     bfs(0,0);
111     if(vis[n-1][m-1])    cout<<"Yes"<<endl;
112     else    cout<<"No"<<endl;
113 }

 

 E:给定一个字符串序列由"MEX"序列构成,给定数字序列a[i](由0,1,2数组构成),让寻找满足(a[i],a[j],a[k])i<=j<=k且s[i]s[j]s[k]="MEX",求所有满足条件的mex(a[i],a[j],a[k])的和

mex表示除去a[i],a[j],a[k]中最小的非负整数

比如:

 

 

确定以字母E为中继点,寻找e的前缀字母M的数量和后缀E的数量,求最后的组合贡献总和即可

 

 1 //要找的位置满足字符串"MEX"的形式,根据1,3样例可知有多个组合形式的"MEX"
 2 //这就需要我们把E的位置作为中继点,找前缀"M"和后缀"E"的数量,并且统计为0,1,2的数量的情况
 3 //最后求解时,枚举M为0,1,2的三种和E为0,1,2的情况,这样一共有九种组合方式,每种组合的对结果的贡献是
 4 //cntm*cntx*mex(a[[nowm]],a[i],a[nowe]),i代表当前字母是E的情况
 5 #include<cstdio>
 6 #include<cstring>
 7 #include<algorithm>
 8 #include<iostream>
 9 #include<string>
10 #include<vector>
11 #include<stack>
12 #include<bitset>
13 #include<cstdlib>
14 #include<cmath>
15 #include<set>
16 #include<list>
17 #include<deque>
18 #include<map>
19 #include<queue>
20 #include <iomanip>
21 #include<ctime>
22 using namespace std;
23 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
24 #define TLE (double)clock()/CLOCKS_PER_SEC<=0.95
25 #define int long long 
26 #define double long double
27 #define endl '\n'
28 #define inf LLONG_MAX
29 #define iinf INT_MAX
30 typedef pair<int,int> PII;
31 const double PI = acos(-1.0);
32 const double eps = 1e-6;
33 const int INF = 0x3f3f3f3f;
34 const int N = 2e5+10;
35 int n,a[N];
36 string s;
37 int mex(int x,int y,int z)
38 {
39     for(int i=0;i<3;i++)    
40     {
41         if(x!=i&&y!=i&&z!=i)    return i;
42     }
43     return 3;
44 }
45 signed main()
46 {
47     IOS;
48     cin>>n;
49     for(int i=0;i<n;i++)    cin>>a[i];
50     cin>>s;
51     vector<vector<int>>cnt_l(n+1,vector<int>(3,0));
52     vector<vector<int>>cnt_r(n+1,vector<int>(3,0));
53     for(int i=0;i<n;i++)
54     {
55         cnt_l[i+1]=cnt_l[i];
56         if(s[i]=='M')    cnt_l[i+1][a[i]]++;
57     }
58     for(int i=n-1;i>=0;i--)
59     {
60         cnt_r[i]=cnt_r[i+1];
61         if(s[i]=='X')    cnt_r[i][a[i]]++;
62     }
63     int sum=0;
64     for(int i=0;i<n;i++)
65     {
66         if(s[i]!='E')    continue;
67         for(int j=0;j<3;j++)
68         {
69             for(int k=0;k<3;k++)
70             {
71                 sum+=cnt_l[i][j]*cnt_r[i+1][k]*mex(j,a[i],k);
72             }
73         }
74     }
75     cout<<sum<<endl;
76     return 0;
77 }

 

标签:308,AtCoder,const,Beginner,int,double,tie,include,define
From: https://www.cnblogs.com/LQS-blog/p/17520401.html

相关文章

  • abc308
    E考虑分开处理,我们枚举中间的E,然后再枚举前面的M和后面的X分别是什么。这样的话,我们会发现,对于相同的\((A_i,A_j,A_k)\),其贡献是相同的。我们可以记录前缀和后缀中,\(A_i\)为某个值的M和X数量,然后计算个数,单独处理MEX即可。lln,pre[200005][3],suf[200005][3],a[2......
  • 【atcoder beginner 308E - MEX】
    前缀和二分查找打表枚举代码如下importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.StreamTokenizer;importjava.util.ArrayList;importjava.util.List;publicclassMain{publicstaticIntege......
  • AtCoder Grand Contest 021 E Ball Eat Chameleons
    洛谷传送门AtCoder传送门容易发现一个变色龙是红色当且仅当,设\(R\)为红球数量,\(B\)为蓝球数量,那么\(R\geB\)或\(R=B\)且最后一个球是蓝球。考虑如何判定一个颜色序列是否可行。考虑贪心。若\(R<B\)显然不行。若\(R\geB+n\),每个变色龙都可以分到比蓝球......
  • AtCoder Beginner Contest 307(E,F,G)
    AtCoderBeginnerContest307(E,F,G)E(dp)E这个题大意就是我们需要组成一个长度为\(n\)的数组,满足两个相邻的数字不可以相等,其中,\(a_1\)和\(a_n\)也是相邻的,我们可以选择的数字为\(0\)到\(m-1\),问最后有多少种不同的组成方式满足以上条件。题目大意很简单,就是有点难想,如果\(a......
  • Atcoder Beginner Contest 251-260 EFG
    #251E-TakahashiandAnimals*1261,*环形dpACLink考虑环形dp,对于使用或者不使用\(1\)号饲料分别dp,然后取最小值即可。......
  • AtCoder Beginner Contest(abc) 297
    B-chess960题目大意给定一串字符串,里面一定包含2个'B',2个'R',1个'K',问该字符串是否满足以下两个条件,一是两个'B'所在位置奇偶性不同;二是'K'的位置在两个'R'之间解题思路签到题不多嗦了;神秘代码#include<bits/stdc++.h>#defineintlonglongusi......
  • AtCoder Beginner Contest 296 Ex Unite
    洛谷传送门AtCoder传送门不错的dp。考虑按行从上往下dp,并且把列的连通状态塞进dp状态里面。实际上就是塞一个并查集。判状态合法性就是当一个竖的全黑长条结束后,有没有跟别的列连起来。code//Problem:Ex-Unite//Contest:AtCoder-AtCoderBeginnerContest29......
  • AtCoder Beginner Contest 227 H Eat Them All
    洛谷传送门AtCoder传送门好奇特的题。考虑显式建图,那么这是一个\(9\)个结点,\(12\)条边的图,需要找到一条回路使得第\(i\)个点被经过\(a_i\)次。首先会有一个基本思路:先求出每条边经过的次数,然后每条边复制这么多次即可直接构造欧拉回路。其中每条边经过次数的限制就是,......
  • AtCoder Beginner Contest 306(ABC 306) E~F补题
    E题目大意给定数字$k$,规定数组$A$的函数$f(A)$:$A$数组前$k$大数字的和如$A=[1,3,7,~4]$,$k=2$,则$f(A)=7+4=11$现在给定最大数组长度$n$,有$q$组操作,每次将第$x$个数字修改为$y$,输出每次操作后的$f(A)$其中$0<k\leqn\leq5\times10^5,~q\leq5\times......
  • AtCoder Beginner Contest 228 G Digits on Grid
    洛谷传送门AtCoder传送门?这啥啊,不会。考虑行和列分别作为左部点和右部点建二分图(实际上这个建图只是辅助理解,不需要显式建图),每个左部点和每个右部点,边权为格子中的数。容易想到一个dp,设\(f_{i,j}\)为走了\(i\)步,当前在点\(j\),走过的所有边权组成的不同整数的数量。但......