记录上车站点两个方向按顺序听到的数,对给的m个站点数一一对比,若两个方向m个站点完全一样且与听到的m个站点数一样则无法判断,若两个方向m个站点不一样且正确的方向与听到的站点数一样则方向正确,否则,方向错误。
#include
#define ll long long
const int maxn=2e5+10;
using namespace std;
int a[maxn],res[maxn],b[maxn];
int main()
{
int n,x,y,m,temp;
vectorleft;
vectorright;
cin>>n>>x>>y;
for(int i=1;i<=n;i++)cin>>a[i];
cin>>m;
for(int i=0;i>b[i];
int t=max(x,y)-min(x,y);
if(x=x-t;i--)left.push_back(a[i]);
int tt=1;
for(int i=0;i
学姐补的。
#include
using namespace std;
const int N = 40;
int n,m,w[N],com[N],money[N],u,v,st[N],mp[N][N];
vector e[N];
int ans[N];
void dfs(int now,int sum)
{
ans[now]=max(ans[now],sum);
for(auto i: e[now])
{
if(st[com[i]]==0)
{
st[com[i]]=1;
dfs(i,sum+money[com[i]]);
st[com[i]]=0;
}
else
{
dfs(i,sum);
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) scanf("%d",&com[i]);
for(int i=1;i<=n;i++) scanf("%d",&money[i]);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
mp[u][v]=1;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=j+1;k<=n;k++)
if(mp[j][k]&&mp[j][i]&&mp[i][k])
mp[j][k]=0;
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
if(mp[i][j])
e[i].push_back(j);
ans[1]=money[com[1]];
st[com[1]]=1;
dfs(1,ans[1]);
for(int i=1;i<=n;i++) printf("%d\n",ans[i]);
//system("pause");
return 0;
}
不难发现,按顺序在相邻两地修建道路的总费用最小,每次修建费用:maxi≤k≤j{ak}。
#include
#define ll long long
const int maxn=2e5+10;
using namespace std;
int a[maxn],res[maxn],bit[maxn],n;
int main()
{
int n;
ll ans=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(i>1)ans+=max(a[i],a[i-1]);
}
printf("%lld\n",ans);
//system("pause");
return 0;
}
签到,当r无穷大时,整个图的面积和n个圆的面积比趋向1/n.
#include
#define ll long long
const int maxn=1e5+10;
using namespace std;
int a[maxn],res[maxn],bit[maxn],n;
int main()
{
int n,x,y;
int ans=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x>>y;
}
printf("%.12lf\n",(double)1/n);
//system("pause");
return 0;
}
模拟,要记录当前速度和车头方向,模拟过程判断是否撞到墙或者超出地图范围。
#include
#define ll long long
const int maxn=2e5+10;
using namespace std;
char map1[60][60];
int n,m,x,y,q;
int xx,yy,v=0,dd=0;//v记录速度,dd记录方向
vector>dir;
void x_y(int tu)//判断当前方向
{
if(tu==-1)//left
{
if(dd==0)dd=7;
else dd--;
}
else
{
if(dd==7)dd=0;
else dd++;
}
}
bool peng()//判断是否碰撞
{
if(v==0)return false;
else
{
for(int i=1;i<=v;i++)
{
if(map1[x+dir[dd].first][y+dir[dd].second]=='#')//上下左右且碰壁
{
v=0;
return true;
}
else if(dd%2&&(map1[x+dir[dd].first][y]=='#')&&(map1[x][y+dir[dd].second]=='#'))
{
v=0;
return true;
}
else
{
x=x+dir[dd].first;
y=y+dir[dd].second;
if(x>n||y>m||x<1||y<1)//穿模
{
x=x-dir[dd].first;
y=y-dir[dd].second;
v=0;
return true;
}
}
}
return false;
}
}
int main()
{
cin>>n>>m;
getchar();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%c",&map1[i][j]);
if(map1[i][j]=='*')x=i,y=j;
}
getchar();
}
//cout<<"x:"<>q;
string s;
cin>>s;
for(int i=0;i
签到,统计所有“-”。
#include
#define ll long long
const int maxn=1e5+10;
using namespace std;
int a[maxn],res[maxn],bit[maxn],n;
int main()
{
int n;
int ans=0;
char s[15];
cin>>n;
getchar();
for(int i=1;i<=n;i++)
{
// getline(cin,s);
gets(s);
//cout<