A
给出n号线公交车,给出人到达车站的时间点,给出每号公交车第一次到达车站和每几分钟来一班。人总是坐他到达车站之后来的第一辆公交车,如果有好几辆同时到,就输出任意一个。
1.如果i号车第一次到的时间小于人到的时间,就找出i号车第一个大于人到达时间的到达时间。
2.维护一个最小值,输出最小值的编号即可。
#include<bits/stdc++.h>
using namespace std;
const int N = 10050;
typedef long long ll;
int main()
{
ll n,t;
cin>>n>>t;
ll minx=1e9+10;
int mini=1;
for(int i=1;i<=n;i++)
{
ll x,y;
cin>>x>>y;
if(x<t)
{
ll t2=ceil((t-x)*1.0/y);
ll t3=t2*y+x;
//cout<<t3<<endl;
if(t3-t<minx)
{
minx=t3-t;
mini=i;
}
}
else
{
//cout<<x-t<<endl;
if(x-t<minx)
{
minx=x-t;
mini=i;
}
}
//cout<<minx<<endl;
}
cout<<mini<<endl;
}
给出一个三视图,分别是:
1.从左边看,每一行的高度。
2.从前面看,每一列的高度。
3.从上面看,每个c[i][j]是否存在至少一个方块。
要求输出一个满足给出三视图的俯视图,每个ans[i][j]表示该坐标下的方块高度。
思路:
对于每一个c[i][j],只要使得这个坐标的方块高度取左视图和前视图矮的那个值即可。因为全图最高的那个柱,左视图和前视图肯定一样,只要保证了最高柱的正确性,剩下的取小值就是符合题意的。
#include<bits/stdc++.h>
using namespace std;
const int N = 1100;
int yy[N],xx[N],c[N][N];
int ans[N][N];
int main()
{
int x,y,z;
cin>>x>>y>>z;
for(int i=1;i<=y;i++)
cin>>yy[i];
for(int i=1;i<=x;i++)
cin>>xx[i];
for(int i=1;i<=x;i++)
{
for(int j=1;j<=y;j++)
{
cin>>c[i][j];
}
}
for(int i=1;i<=x;i++)
{
for(int j=1;j<=y;j++)
{
if(c[i][j]==1)
{
ans[i][j]=min(yy[j],xx[i]);
}
}
}
for(int i=1;i<=x;i++)
{
for(int j=1;j<=y;j++)
{
cout<<ans[i][j]<<' ';
}
cout<<endl;
}
}
c 括号匹配
给你一个含有左括号,右括号,问号的字符串,将字符串中的问好修改成左括号或者右括号,使得括号匹配且字符串任意一个前缀都不匹配。
括号匹配的序列通常有以下性质
1.左括号右括号数量相等。
2.定义一个累加器,遇到 ( +1,遇到 ) -1,只要同时满足累加器为非负数和性质1,括号就匹配。
该题需要构造出的字符串要求不存在一个前缀为括号匹配的,只要贪心的让左括号尽量靠前,右括号尽量靠后即可。
记录一下使得左括号达到字符串长度的一半,需要将多少个问好变成左括号。遍历字符串找问好即可
#include <bits/stdc++.h>
#define LL long long
#define mem(i, j) memset(i, j, sizeof(i))
#define gcd(i, j) __gcd(i, j)
using namespace std;
stack<int>st;
const int N = 1100;
int main()
{
int n;
cin>>n;
string s;
cin>>s;
int a=0;
int b=0;
for(auto i: s)
{
if(i=='(') a++;
else if(i==')')b++;
}
int na=n/2-a;
int nb=n/2-b;
//cout<<na<<' '<<nb<<endl;
for(int i=0;i<n;i++)
{
if(na>0&&s[i]=='?')
s[i]='(',na--;
}
for(int i=0;i<n;i++)
{
if(nb>0&&s[i]=='?')
s[i]=')',nb--;
}
int f1=0;
int f2=0;
for(int i=0;i<n;i++)
{
if(s[i]=='(')
f1++;
else f1--;
if(f1<=0&&i!=n-1)
{
f2=1;
}
}
//cout<<f2<<' '<<f1<<endl;
if(!f2&&!f1)
cout<<s<<endl;
else cout<<":("<<endl;
}