A
没得说
#include <iostream>
#include <map>
#include <queue>
#include <algorithm>
#include <vector>
#include <cmath>
#include <cstring>
using namespace std;
using ll = long long;
ll P = 998244353;
const int N = 2e5 + 100;
ll a[N];
ll vis[N];
ll lis[N];
void solve() {
ll m;cin>>m;
cout<<(m+1)/2;
}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
/*cin >> t;*/
while (t--) {
solve();
}
return 0;
}
B
也没得说
#include <iostream>
#include <map>
#include <queue>
#include <algorithm>
#include <vector>
#include <cmath>
#include <cstring>
using namespace std;
using ll = long long;
ll P = 998244353;
const int N = 2e5 + 100;
ll a[N];
ll vis[N];
ll lis[N];
string s[110];
void solve() {
int n;cin>>n;
ll ans=0;
for(int i=1;i<=n;i++){
cin>>s[i];
for(int j=0;j<s[i].size();j++)
{
ans+=s[i][j]-'0';
}
}
if(ans%3==0)cout<<"YES";
else cout<<"NO";
}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
/*cin >> t;*/
while (t--) {
solve();
}
return 0;
}
C
注意分情况讨论
#include <iostream>
#include <map>
#include <queue>
#include <algorithm>
#include <vector>
#include <cmath>
#include <cstring>
#include <iomanip>
using namespace std;
using ll = long long;
ll P = 998244353;
const int N = 2e5 + 100;
ll a[N];
ll vis[N];
ll lis[N];
void solve() {
double x,y,t,a,b,c;cin>>x>>y>>t>>a>>b>>c;
if(x<=t)
{
double time=(100-x)/c;
cout << fixed << setprecision(9) << time << endl;
}
else {
double time=(100-x)/b;
double cnt=(x-t)/y+(100-t)/c;
time=min(time,cnt);
cout << fixed << setprecision(9) << time << endl;
}
}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int q = 1;
/*cin >> t;*/
while (q--) {
solve();
}
return 0;
}
D
辗转相除
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef double D;
typedef pair<int, int> Pii;
const int N = 2e5 + 10;
ll gcd(ll a,ll b){
return b==0?a:gcd(b,a%b);
}
ll f(string a,ll b){
ll res=0;
for(char ch:a){
res=(res*10%b+(ch-'0'))%b;
}
return res;
}
void solved()
{
string a;
ll b;
cin>>a>>b;
ll a_mod_b=f(a,b);
cout<<gcd(b,a_mod_b)<<"\n";
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
while (t--)
{
solved();
}
return 0;
}
E
先来个错误示范175分
#include <iostream>
#include <queue>
#include <vector>
#include <cstring>
using namespace std;
const int INF = 1e9 + 7;
const int MAXN = 510;
int a[MAXN][MAXN];
int lis[MAXN][MAXN];
bool vis[MAXN][MAXN];
int dxx[4] = { 1, -1, 0, 0 };
int dyy[4] = { 0, 0, -1, 1 };
struct Point {
int x, y;
};
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> a[i][j];
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= n; j++) {
lis[i][j] = INF;
vis[i][j] = false;
}
}
queue<Point> q;
q.push({1, 1});
lis[1][1] = a[1][1];
while (!q.empty()) {
Point p = q.front();
q.pop();
if (vis[p.x][p.y]) continue;
vis[p.x][p.y] = true;
for (int i = 0; i < 4; i++) {
int nx = p.x + dxx[i];
int ny = p.y + dyy[i];
if (nx >= 1 && nx <= n && ny >= 1 && ny <= n && !vis[nx][ny]) {
lis[nx][ny] = min(lis[nx][ny], max(lis[p.x][p.y], a[nx][ny]));
q.push({nx, ny});
}
}
}
cout << lis[n][n] << endl;
return 0;
}
这种就是不会走被标记的点,就漏情况了,正确做法是二分加BFS
正确代码稍后给出
#include <iostream>
#include <map>
#include <queue>
#include <algorithm>
#include <vector>
#include <cmath>
#include <cstring>
using namespace std;
using ll = long long;
ll P = 998244353;
const int N = 2e5 + 100;
ll a[1000][1000];
ll vis[1000][1000];
ll lis[1000][1000];
int dxx[4] = { 1,-1,0,0 };
int dyy[4] = { 0,0,-1,1 };
struct point {
int dx;
int dy;
};
bool check(ll n,ll mid)
{
if(a[1][1]>mid)return false;
memset(vis,0,sizeof(vis));
queue<point>que;
vis[1][1]=1;
que.push({1,1});
while(!que.empty())
{
if(que.front().dx==n&&que.front().dy==n)
return true;
for(int k=0;k<=3;k++)
{
int ddxx=que.front().dx+dxx[k];
int ddyy=que.front().dy+dyy[k];
if(vis[ddxx][ddyy]||ddxx<1||ddyy<1||ddxx>n||ddyy>n||a[ddxx][ddyy]>mid)continue;
que.push({ddxx,ddyy});
vis[ddxx][ddyy]=1;
}
que.pop();
}
return false;
}
void solve() {
int n; cin >> n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)cin>>a[i][j];
ll l=0;
ll r=1e9+1;
while(l<r)
{
ll mid=(l+r)>>1;
if(check(n,mid))
{
r=mid;
}
else l=mid+1;
}
cout << l;
}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
/*cin >> t;*/
while (t--) {
solve();
}
return 0;
}