http://codeforces.com/contest/1153/problem/A 题意:有n辆车,有一个人从第m站上车。接下来n行,每行两个数a,b代表有一路车第一站到a站,然后每隔b站停一次
... .
http://codeforces.com/contest/1153/problem/A
题意:有n辆车,有一个人从第m站上车。接下来n行,每行两个数a,b代表有一路车第一站到a站,然后每隔b站停一次。问你这个人会上哪个车。输出任意答案即可。
思路:数据1e5,直接标记会到的站点暴力跑就可以了。
.1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int n,m; 5 int a[100005]; 6 int d[100005]; 7 int p[300005]; 8 int main(){ 9 cin >> n >> m;10 memset(p,0,sizeof(p));11 for(int i = 1;i <= n;i ++){12 cin >> a[i] >> d[i];13 int t = a[i];14 while(t <= 300000){15 p[t] = i;16 t += d[i];17 }18 }19 for(int i = m;i <= 300000;i ++){20 if(p[i] != 0){21 cout << p[i] << endl;22 break;23 }24 }25 26 return 0;27 }. A .
http://codeforces.com/contest/1153/problem/B
题意:第一行三个数代表某种由1*1*1的积木搭成的一个形状的长宽高。第二行m个数代表正视图的每个格子有多高。第三行n个数为左视图的每隔各自有多高。下面n*m个数代表俯视图的每个格子是否有积木。
输出n*m个数代表俯视图,不过要输出每个点的有几块积木。输出任意答案即可。
思路:ans[i][j] = min(front[j],left[i])。
.1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int n,m,k; 5 int fr[105]; 6 int lf[105]; 7 int top[105][105]; 8 int ans[105][105]; 9 int main(){10 cin >> n >> m >> k;11 memset(ans,sizeof(ans));12 for(int i = 1;i <= m;i ++){13 cin >> fr[i];14 }15 for(int i = 1;i <= n;i ++){16 cin >> lf[i];17 }18 for(int i = 1;i <= n;i ++){19 for(int j = 1;j <= m;j ++){20 cin >> top[i][j];21 }22 }23 for(int i = 1;i <= n;i ++){24 for(int j = 1;j <= m;j ++){25 if(top[i][j]){26 ans[i][j] = min(lf[i],fr[j]);27 }28 }29 }30 for(int i = 1;i <= n;i ++){31 for(int j = 1;j <= m;j ++){32 if(j != 1){cout << " ";}33 cout << ans[i][j];34 }cout << endl;35 }36 37 38 39 return 0;40 }. B .
http://codeforces.com/contest/1153/problem/C
题意:给一串只含有‘(‘,‘)‘,‘?‘的字符串,你要将问好换成左右括号,问你全部将问号填上之后,会不会形成一个所有前缀串的括号都不匹配,但是全串的括号匹配的串。
思路:很明显,初始串长度必须为偶数,左右括号数量不能超过串长的一半(这条卡了我两发,有点蠢)。然后贪心填写左括号直到左括号用完。最后判断就行了。
.1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int n,m; 5 char in[300005]; 6 int main(){ 7 cin >> n; 8 scanf("%s",in); 9 if(n % 2){cout << ":(" << endl;return 0;}10 int left = 0;11 int right = 0;12 for(int i = 0;i < n;i ++){13 if(in[i] == ‘(‘){left ++;}14 if(in[i] == ‘)‘){right ++;}15 }16 left = n / 2 - left;17 if(left < 0){cout << ":(" << endl;return 0;}18 if(right > n / 2){cout << ":(" << endl;return 0;}19 for(int i = 0;i < n;i ++){20 if(in[i] == ‘?‘){21 if(left){22 in[i] = ‘(‘;23 left --;24 }25 else{26 in[i] = ‘)‘;27 }28 }29 }30 //printf("%s/n",in);31 int f = 1,cnt = 0;32 for(int i = 0;i < n;i ++){33 if(in[i] == ‘(‘){34 cnt ++;35 }36 else{37 if(cnt){38 cnt --;39 if(cnt == 0 && i != n - 1){40 f = 0;41 }42 }43 else{44 f = 0;45 }46 }47 }48 if(f){49 printf("%s/n",in);50 }51 else{52 cout << ":(" << endl;53 }54 55 return 0;56 }. C .
http://codeforces.com/contest/1153/problem/D
D题留坑,感觉是有一种方式最优的,还没想到
. .. ...