A. Serval and Bus
题目链接:
http://codeforces.com/contest/1153/problem/A
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=105;
ll gcd (ll a,ll b)
{
return b==0? a:gcd(b,a%b);
}
int n,k;
int a[maxn],w[maxn];
int main()
{
scanf("%d%d",&n,&k);
for (int i=1;i<=n;i++)
{
scanf("%d%d",&a[i],&w[i]);
}
int ans=0,ok=0;
for (int i=1;i<=n;i++)
{
if(a[i]>k) continue;
if((k-a[i])%w[i]==0)
{
ans=i;
break;
}
}
if(ans!=0) {
printf("%d\n",ans);
return 0;
}
for (int i=1;i<=n;i++)
{
while(a[i]<k)
{
a[i]+=w[i];
}
}
int Min=0x3f3f3f3f,loc=-1;
for (int i=1;i<=n;i++) {
if(Min>a[i])
{
Min=a[i];
loc=i;
}
}
printf("%d\n",loc);
return 0;
}
B. Serval and Toy Bricks
题目链接:
http://codeforces.com/contest/1153/problem/B
俯视图为1的点只需要取左视图和主视图中较小的值即可
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
const int maxn=105;
ll gcd (ll a,ll b)
{
return b==0? a:gcd(b,a%b);
}
int n,m,hh;
int a[maxn];
int b[maxn];
int h[maxn][maxn];
int ans[maxn][maxn];
int main()
{
scanf("%d%d%d",&n,&m,&hh);
for (int i=1;i<=m;i++) scanf("%d",&a[i]);
for (int i=1;i<=n;i++) scanf("%d",&b[i]);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
scanf("%d",&h[i][j]);
}
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
ans[i][j]=INF;
}
}
for (int i=1;i<=m;i++)
{
for (int j=1;j<=n;j++)
{
if(h[j][i]==1) ans[j][i]=min(ans[j][i],a[i]);
}
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
if(h[i][j]==1) ans[i][j]=min(ans[i][j],b[i]);
}
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
if(h[i][j]==0) printf("0 ");
else printf("%d ",ans[i][j]);
}
printf("\n");
}
return 0;
}
C. Serval and Parenthesis Sequence
题目链接:
http://codeforces.com/contest/1153/problem/C
保证前后字符必须为'('和')',然后判断中间的字符串是否可以一一匹配。
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
const int maxn=3*1e5+5;
ll gcd (ll a,ll b)
{
return b==0? a:gcd(b,a%b);
}
int n;
char s[maxn];
int main()
{
scanf("%d",&n);
scanf("%s",s);
if(n%2)
{
printf(":(\n");
return 0;
}
if(s[0]==')')
{
printf(":(\n");
return 0;
}
if(s[0]=='?') s[0]='(';
if(s[n-1]=='(')
{
printf(":(\n");
return 0;
}
if(s[n-1]=='?') s[n-1]=')';
int numa,numb;
numa=numb=(n-2)/2;
for (int i=1;i<n-1;i++)
{
if(s[i]=='(') numa--;
if(s[i]==')') numb--;
}
for (int i=1;i<n-1;i++)
{
if(s[i]=='?')
{
if(numa>0)
{
s[i]='(';
numa--;
}
else
{
s[i]=')';
numb--;
}
}
}
if(numa!=0||numb!=0)
{
printf(":(\n");
return 0;
}
stack<char> st;
for (int i=1;i<n-1;i++)
{
if(s[i]=='(')
{
st.push(s[i]);
}
else
{
if(st.empty())
{
printf(":(\n");
return 0;
}
char t=st.top();
if(t=='(') st.pop();
else
{
printf(":(\n");
return 0;
}
}
}
if(!st.empty())
{
printf(":(\n");
return 0;
}
printf("%s\n",s);
return 0;
}