比赛地址:牛客小白月赛99_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ
A.材料打印
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve() {
ll a,b,c,d;
cin>>a>>b>>c>>d;
if(c<d)
cout<<a*c+b*d<<endl;
else
{
cout<<(a+b)*d<<endl;
}
}
signed main() {
int t;
cin >> t;
while (t--) {
solve();
}
}
B.%%%
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve() {
ll n,cnt;
cin>>n;
if(n==0)
{
cout<<0<<endl;
return;
}
while(1)
{
if(n==0)
{
cout<<cnt<<endl;
return;
}
if (n & 1)
{
n = n % ((n + 1) / 2);
}
else
{
n = n % (n / 2 + 1);
}
cnt++;
}
}
signed main() {
int t;
cin >> t;
while (t--) {
solve();
}
}
C.迷宫
这题有点难绷,前面一直超时
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int map1[1010][1010];
bool visited[1010][1010];
bool logs[1010][1010];
ll a,b;
int direction[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
queue<pair<int,int> > q;
bool dfs(int x, int y, int end_x, int end_y) {
// 如果当前位置超出了边界或已经访问过,返回 false
if (x < 1 || x > a || y < 1 || y > b || visited[x][y] || map1[x][y] != 1) {
return false;
}
// 如果当前位置是终点,返回 true
if (x == end_x && y == end_y) {
return true;
}
// 标记当前位置为已访问
visited[x][y] = true;
// 尝试四个方向移动
if (dfs(x - 1, y, end_x, end_y)) return true; // 上
if (dfs(x + 1, y, end_x, end_y)) return true; // 下
if (dfs(x, y - 1, end_x, end_y)) return true; // 左
if (dfs(x, y + 1, end_x, end_y)) return true; // 右
// 如果没有找到路径,回溯
return false;
}
void dfs1(int x, int y,int key) {
if (x < 1 || x > a || y < 1 || y > b || visited[x][y] || map1[x][y] == 2) {
return;
}
if (map1[x][y]==1) {
if(key)
{
map1[x][y]=9;
}
else
{
q.push({x,y});
}
}
// 标记当前位置为已访问
visited[x][y] = true;
// 尝试四个方向移动
dfs1(x - 1, y,key);
dfs1(x + 1, y,key);
dfs1(x, y - 1,key);
dfs1(x, y + 1,key);
}
void solve() {
ll c,d;
cin>>a>>b;
char s;
memset(map1,0,sizeof(map1));
int numx,numy,end_x,end_y;
for(c=1;c<=a;c++)
{
for(d=1;d<=b;d++)
{
cin>>s;
if(s=='.')
{
map1[c][d]=1;
}
else if(s=='#')
{
map1[c][d]=2;
}
else if(s=='S')
{
numx=c;
numy=d;
map1[c][d]=1;
}
else if(s=='E')
{
end_x=c;
end_y=d;
map1[c][d]=1;
}
}
}
if(dfs(numx,numy,end_x,end_y))
{
cout<<"YES";
return;
}
memset(visited,0,sizeof(visited));
dfs1(end_x,end_y,0);
memset(visited,0,sizeof(visited));
dfs1(numx,numy,1);
/*
for(c=1;c<=a;c++)
{
for(d=1;d<=b;d++)
{
cout<<map1[c][d];
}
cout<<endl;
}*/
memset(logs,0,sizeof(logs));
while(!q.empty())
{
pair<int,int> i1=q.front();
int num1=i1.first;
int num2=i1.second;
q.pop();
if(logs[num1][num2])
{
}
else
{
logs[num1][num2]=1;
}
int x,y,x1,y1;
for(int v1=0;v1<=3;v1++)
{
x=num1+direction[v1][0];
y=num2+direction[v1][1];
//左
if(logs[x][y])
{
continue;
}
else
{
logs[x][y]=1;
}
x1=x;
y1=y;
while(x1>=1&&y1>=1&&x1<=a&&y1<=b)
{
if(map1[x1][y1]==9)
{
cout<<"YES";
return;
}
x1--;
}
//上
x1=x;
y1=y;
while(x1>=1&&y1>=1&&x1<=a&&y1<=b)
{
if(map1[x1][y1]==9)
{
cout<<"YES";
return;
}
y1++;
}
//下
x1=x;
y1=y;
while(x1>=1&&y1>=1&&x1<=a&&y1<=b)
{
if(map1[x1][y1]==9)
{
cout<<"YES";
return;
}
y1--;
}
//右
x1=x;
y1=y;
while(x1>=1&&y1>=1&&x1<=a&&y1<=b)
{
if(map1[x1][y1]==9)
{
cout<<"YES";
return;
}
x1++;
}
}
}
cout<<"NO";
return;
}
signed main() {
int t=1;
cin.tie(0);cout.tie(0);
ios::sync_with_stdio(0);
//cin >> t;
while (t--) {
solve();
}
}
D.又是一年毕业季
暴力
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10, M = 110, mod = 998244353, inf = 2e9;
typedef pair<int, int> pt;
typedef long long ll;
bool isprime(int x) {
for (int i = 2; i * i <= x; i++) {
if (x % i == 0) return 0;
}
return 1;
}
void solve() {
int n;
cin >> n;
vector<int> a(n);
map<int, int> mp;
for (int i = 0; i < n; i++) {
cin >> a[i];
mp[a[i]]++;
}
sort(a.begin(), a.end());
for (int i = 2; i <= a[n - 1] + 100; i++) {
if (isprime(i) && !mp.count(i)) {
cout << i << endl;
return;
}
}
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
solve();
}
return 0;
}