A. Alena's Schedule
间隔0长度为1被记录 1被记录 其余不记录
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <vector> using namespace std; int main() { int t; cin>>t; int pre = 0; int a = 0,ans= 0; bool mk = false; while(t--) { cin>>a; if(a) { if(pre<2) ans+=pre; pre=0; ans+=1; mk=true; } else{ if(mk) { pre++; } } } cout<<ans<<endl; return 0; }
B. Laurenty and Shop
前缀后缀枚举转折点。
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <vector> #include <climits> using namespace std; int a[100],b[100]; int main() { int t; cin>>t; int x; for(int i=1;i<t;i++) // 0 1 2 3 { cin>>x; a[i] = a[i-1] + x; } for(int i=1;i<t;i++) // 0 1 2 3 { cin>>x; b[i] = b[i-1] + x; } vector<int>v; for(int i=0;i<t;i++) { cin>>x; v.push_back(a[i]+b[t-1]-b[i]+x); } sort(v.begin(),v.end()); cout<<v[0]+v[1]<<endl; return 0; }
C. Gennady the Dentist
读不懂 模拟题
D. Phillip and Trains
每次向右走一格,所以我们只要确定他活过m轮,就一定到达终点。//
判断车的位置 当前位置加2×t 车的位置不容易改变所以我们把自己加上2×t相当于车往左走了2×t 判断是否合法即可
比赛的时候vis标记位置放错....还是太菜了呢
就是太菜,不想找什么英语差的借口了
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <vector> using namespace std; bool vis[4][1100]; char ch[4][1100]; int n,m; typedef pair<int,int> pii; bool check(int x,int y,int dir,int t,vector<pii>& now) { int nx = dir+x; int ny = y+1; if(nx<0||nx>=n||ny<0||ny>=m||vis[nx][ny]) return false; int a,b,c; a = (y+2*t+1); b = (a+1); c = (b+1); if(dir) { if((a<m&&ch[x][a]!='.')) return false; } if((a<m&&ch[nx][a]!='.')||(b<m&&ch[nx][b]!='.')||(c<m&&ch[nx][c]!='.')) return false; now.push_back(make_pair(nx,ny)); vis[nx][ny] = true; return true; } bool bfs(int x,int y)//shijiweizhi { vector<pii>now,nxt; now.push_back(make_pair(x,y)); int time = 0; vis[x][y] = true; while(now.size()) { if(time>=m) break; for(int i=0;i<now.size();i++) { //printf("%d %d %d",time,now[i].first,now[i].second); for(int j=-1;j<=1;j++) { check(now[i].first,now[i].second,j,time,nxt); } } swap(now,nxt); nxt.clear(); time++; } return time>=m; } int main() { int t; cin>>t; while(t--) { memset(vis,0,sizeof(vis)); memset(ch,0,sizeof(ch)); int k; scanf("%d%d",&m,&k); n = 3; int sx,sy; for(int i=0;i<n;i++) { scanf("%s",ch[i]); for(int j=0;j<m;j++) { if(ch[i][j]=='s') { ch[i][j] = '.'; sx = i; sy = j; } } } //cout<<sx<<sy<<endl; if(bfs(sx,sy)) puts("YES"); else puts("NO"); } return 0; }
E. Alice, Bob, Oranges and Apples
每个人操作的次数就是GCD的过程
#include <cstdio> #include <iostream> #include <algorithm> #include <vector> #include <set> #include <string.h> #include <cctype> #include <climits> using namespace std; typedef long long ll; char ch = 'A'; bool mk; ll gcd(ll a,ll b) { if(b==0) return a; ll val = a/b; if(val) { if(a%b==0) val--; if(val) { cout<<val<<char(ch+mk); mk = !mk; } } return gcd(b,a%b); } int main() { ll x,y; cin>>x>>y; mk = x<y; if(__gcd(x,y)!=1) { printf("Impossible"); } else{ gcd(x,y); } return 0; }