北京理工大学第十七届程序设计竞赛决赛
A. 赛前须知
输出ACACACACAC即可
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
std::ios::sync_with_stdio(0);
std::cin.tie(0);
string s="ACACACACAC";
for(int i=0;i<s.size();i++) cout<<s[i]<<endl;
return 0;
}
G. 小P玩钢4
1.先在输入的时候计算有多少个1,即本身需要花费的代价
2.然后再遍历一次,计算每个1周围有多少个1,ans加上相应的数量,把这个遍历过的1赋值为0,这样做的原理是因为,一个联通块1你从哪个点开始去遍历,要计算这个块总体的每个1(遍历过后改为0)周围有多少个1结果是一样的
点击查看代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
int dx[]={0,1,-1,0};
int dy[]={-1,0,0,1};
void solve()
{
int n,m,ans=0;
cin>>n>>m;
int a[n][m];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>a[i][j];
if(a[i][j]==1) ans++;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a[i][j]==1)
{
for(int k=0;k<4;k++)
{
int xx=i+dx[k],yy=j+dy[k];
if(a[xx][yy]==1&&xx>=0&&xx<n&&yy>=0&&yy<m){
ans++;
}
}
a[i][j]=0;
}
}
}
cout<<ans;
}
signed main()
{
ios::sync_with_stdio(0),cin.tie(0);
int t=1;
//cin>>t;
while(t--) solve();
return 0;
}
K. str进制
简单的模拟进制,取余,整除,翻转即可
点击查看代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
int dx[]={0,1,-1,0};
int dy[]={-1,0,0,1};
void solve()
{
int n,m;
cin>>n>>m;
string s; cin>>s;
int d; cin>>d;
string ans;
for(int i=n-1;i>=0;i--)
{
ans+=(d%(s[i]-'0'))+'0';
d/=(s[i]-'0');
}
reverse(ans.begin(),ans.end());
cout<<ans;
}
signed main()
{
ios::sync_with_stdio(0),cin.tie(0);
int t=1;
//cin>>t;
while(t--) solve();
return 0;
}
M. 小H的糖果
1.每次只允许改一个字母,然后要我们找出只改一次后的最大字典序的字符串
2.直接暴力,从头开始截取子串,找到第一个不是z的,将其改字母为z,然后比较找到最大的即可
点击查看代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
int dx[]={0,1,-1,0};
int dy[]={-1,0,0,1};
void solve()
{
int n; cin>>n;
string s; cin>>s;
string ans=s;
for(int i=0;i<n;i++)
{
string sb=s.substr(i);
for(int j=0;j<sb.size();j++)
{
if(sb[j]!='z')
{
sb[j]='z';
break;
}
}
if(sb>ans) ans=sb;
}
cout<<ans;
}
signed main()
{
ios::sync_with_stdio(0),cin.tie(0);
int t=1;
//cin>>t;
while(t--) solve();
return 0;
}
J. pass
1.a>w,路面宽度大于车底盘宽度,可以直接过
2.a<w, 当w<=b的时候车最极端是竖起来肯定不行,所以是-1,当w>b的时候,我们算w在地面上的投影,l=sqrt(w*w-b * b ),如果l<=a,说明车的右端可以在墙顶面的最左侧,轮胎高度理想化四舍五入为0,如果l>a,则车的左端应该在路面的最最左侧,我们延伸这个底面这条线至地面,在地上两个直角三角形相似得结果,小直角三角形的斜边就是l-a
点击查看代码
using namespace std;
#define int long long
typedef pair<int,int> pii;
#define all(v) v.begin(),v.end()
void solve()
{
int a,b,h,w;//a为路宽,b为墙高,h为车高,w为车宽
cin>>a>>b>>h>>w;
double ans=0;
if(a>w) ans=0;
else {
if(w<=b) ans=-1;
else {
double l=sqrt(w*w-b*b);
if(l<=a) ans=0;
else ans=(b*(l-a))/w;
}
}
if(ans!=-1) cout<<fixed<<setprecision(10)<<ans<<endl;
else cout<<-1<<endl;
}
signed main()
{
int t=1;
cin>>t;
while(t-- ) solve();
return 0;
}
posted on 2024-06-16 15:40 swj2529411658 阅读(10) 评论(0) 编辑 收藏 举报