A
题意:给定一个时间点t与n种车,每种车首班车时间给定,间隔时间不变,问从t点开始能最先坐上哪一辆车。
基础的模拟,不多赘述。
1 #include<iostream>
2 #include<algorithm>
3 #include<cmath>
4 #include<vector>
5 #include<string>
6 #include<queue>
7 #include<stack>
8 using namespace std;
9 int n,t,s,d,ans=2147483640,ansp;
10 int main(){
11 ios::sync_with_stdio(false);
12 cin>>n>>t;
13 for (int i=1; i<=n; i++) {
14 cin>>s>>d;
15 int now=s;
16 while (now<t) now+=d;
17 if (now-t<ans) ans=now-t,ansp=i;
18 //ans=min(now-t,ans);
19 }
20 cout<<ansp<<endl;
21 return 0;
22 }
B
题意:
有一堆积木,可以用一个二维平面,每个单元有一个高度数值来表示。现给出从积木前方、左方、上方看的形状,需构造一种方案,满足所有情况。
因为有多种情况,只需给出一种即可,所以就先考虑从上往下看的情况。当从上往下看有积木时,此单元的高度设成此点横竖两条看去的高度的较小值即可。
1 #include<iostream>
2 #include<algorithm>
3 #include<cmath>
4 #include<vector>
5 #include<string>
6 #include<queue>
7 #include<stack>
8 using namespace std;
9 int n,m,h;
10 int a[107],b[107],c[107][107],ans[107][107];
11 int main(){
12 ios::sync_with_stdio(false);
13 cin>>n>>m>>h;
14 for (int i=1; i<=m; i++) cin>>a[i];
15 for (int i=1; i<=n; i++) cin>>b[i];
16 for (int i=1; i<=n; i++)
17 for (int j=1; j<=m; j++)
18 cin>>c[i][j];
19 for (int i=1; i<=n; i++)
20 for (int j=1; j<=m; j++) if (c[i][j]==1){
21 ans[i][j]=min(b[i],a[j]);
22 }
23 for (int i=1; i<=n; i++) {
24 for (int j=1; j<=m; j++) cout<<ans[i][j]<<" ";
25 cout<<endl;
26 }
27 return 0;
28 }