牛客小白月赛97

比赛链接:牛客小白月赛97


A

思路

       

代码

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e5 + 10;
int num[N];
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
int a;
cin >> a;
num[a]++;
}
for (int i = 1; i <= 100; i++) {
if (num[i] >= 3) {
cout << "YES" << endl;
return 0;
}
}
cout << "NO" << endl;
return 0;
}

B

思路

       

代码

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e5 + 10;
ll a[N];
int main() {
int n, flag = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
if (a[i] == 0) {
flag = 1;
}
}
if (flag == 1)
cout << "NO" << endl;
else
cout << "YES" << endl;
return 0;
}

C

思路

       

代码

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e6 + 10;
const ll mod = 1e9 + 7;
ll qsm(ll x, ll y) {
ll res = 1;
while (y) {
if (y & 1) {
res *= x;
res %= mod;
}
x *= x;
x %= mod;
y /= 2;
}
return res;
}
ll c(ll x, ll y) {
ll res = 1;
for (ll i = x + 1; i <= y; i++) {
res *= i;
res %= mod;
}
ll res2 = 1;
for (ll i = y - x; i >= 1; i--) {
res2 *= i;
res2 %= mod;
}
res *= qsm(res2, mod - 2);
res %= mod;
return res;
}
int main() {
int n, x;
cin >> n >> x;
ll now = pow(sqrt(x), 2), num = sqrt(x);
if (num < n) {
cout << 0 << endl;
return 0;
}
ll res = 1;
for (int i = num; i > n; i--) {
res += c(n - 1, i - 1);
res %= mod;
}
cout << res ;
return 0;
}

D

思路

       

代码

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e2 + 10;
struct point{
ll x, y, num;
};
int dis[10][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
ll a[N][N], c[N][N], dp[20][20][10010];
int main() {
ll n, m, p;
cin >> n >> m >> p;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
for (int k = 0; k <= p; k++) {
dp[i][j][k] = 1e9;
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
a[i][j] %= (p - 1);
}
}
for (int i =1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> c[i][j];
}
}
queue<point>q;
q.push({1, 1, a[1][1]});
dp[1][1][a[1][1]] = 0;
while (!q.empty()) {
ll x = q.front().x, y = q.front().y, num = q.front().num;
q.pop();
for (int i = 0; i < 4; i++) {
ll dx = x + dis[i][0], dy = y + dis[i][1];
if (dx > n || dx < 1 || dy > m || dy < 1) continue;
ll dnum = (num + a[dx][dy]) % (p - 1);
if (dp[dx][dy][dnum] <= dp[x][y][num] + 1) continue;
dp[dx][dy][dnum] = dp[x][y][num] + 1;
q.push({dx, dy, dnum});
}
}
if (dp[n][m][0] != 1e9) cout << dp[n][m][0];
else cout << -1 << endl;
return 0;
}

E

思路

       

代码


F

思路

       

代码

posted @   薛定谔的AC  阅读(15)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示