又是慢慢比赛的一天,快到十点的时候已经满是疲惫了,于是我当即关上电脑,从机房回到宿舍,所以又要来补题了(哭),何时才能上分上去啊。
A. Serval and Bus
题意:小男孩一个点钟到车站,每辆车都有来的时间和间隙,问小男孩能坐上最早的车是几点的。
题解:把没班车排到大于等于男孩到车站的时间,取最小即可。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <map>
#include <set>
#define mm(i,v) memset(i,v,sizeof i);
using namespace std;
typedef long long ll;
const int mod=1e9+7;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n,T,s,d,t;
int temp=1e9,pos;
cin>>n>>T;
for(int i=1;i<=n;i++){
cin>>s>>d;
if(s>=T)
t=s;
else
t=s+(T-s+d-1)/d*d;
if(t<temp){
temp=t;
pos=i;
}
}
cout<<pos<<"\n";
return 0;
}
B. Serval and Toy Bricks
题意:给你三视图,让你还原这个图形本来的样子。
题解:不断按行和列取最小即可。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <vector>
#include <cctype>
#include <queue>
#include <stack>
#include <cmath>
#include <map>
#include <set>
#define mm(i,v) memset(i,v,sizeof i);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll INF=99999999999999;
const int inf=0x3f3f3f3f;
const int maxn=105;
int r[maxn],c[maxn],g[maxn][maxn];
int main(){
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0);
int row,col,h;
cin>>row>>col>>h;
for(int i=0;i<col;i++)
cin>>c[i];
for(int i=0;i<row;i++)
cin>>r[i];
for(int i=0;i<row;i++)
for(int j=0;j<col;j++){
cin>>g[i][j];
if(g[i][j]==1)
g[i][j]=min(r[i],c[j]);
}
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
cout<<g[i][j];
(j==col-1)?cout<<"":cout<<" ";
}
cout<<"\n";
}
return 0;
}
/*
summary:
*/
C. Serval and Parenthesis Sequence
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <vector>
#include <cctype>
#include <queue>
#include <stack>
#include <cmath>
#include <map>
#include <set>
#define mm(i,v) memset(i,v,sizeof i);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll INF=99999999999999;
const int inf=0x3f3f3f3f;
string s;
int main(){
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int n;
scanf("%d",&n);
cin>>s;
if(n%2==1){
printf(":(\n");
return 0;
}
int n1=0,n2=0;
for(char c:s){
if(c=='(')
n1++;
else if(c==')')
n2++;
}
if(n1>n/2||n2>n/2){
printf(":(\n");
return 0;
}
n1=n/2-n1;
for(char &c:s){
if(c=='?'){
if(n1){
n1--;
c='(';
}
else
c=')';
}
}
int b=0;
for(int i=0;i+1<n;i++){
if(s[i]=='(')
++b;
else
--b;
if(b<=0){
printf(":(\n");
return 0;
}
}
cout<<s;
return 0;
}
/*
summary:
*/
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <vector>
#include <cctype>
#include <queue>
#include <stack>
#include <cmath>
#include <map>
#include <set>
#define mm(i,v) memset(i,v,sizeof i);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll INF=99999999999999;
const int inf=0x3f3f3f3f;
const int maxn=3e5+10;
int a[maxn],d[maxn];
vector<int> e[maxn];
int cnt=0;
int n;
void dfs(int fa){
if(!e[fa].size()){
d[fa]=1;
cnt++;
return ;
}
d[fa]=a[fa]? n:0;
for(unsigned i=0;i<e[fa].size();i++){
int s=e[fa][i];
dfs(s);
if(a[fa])
d[fa]=min(d[fa],d[s]);
else
d[fa]=d[fa]+d[s];
}
}
int main(){
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int x;
for(int i=2;i<=n;i++){
scanf("%d",&x);
e[x].push_back(i);
}
dfs(1);
printf("%d\n",cnt+1-d[1]);
return 0;
}
/*
summary:
*/