Educational Codeforces Round 128 (Rated for Div. 2)
ABC ac代码加补题
A题
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <set>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <deque>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
const int N = 200010;
int a[N], b[N];
bool cmp(int a, int b)
{
return a > b;
}
void solve()
{
memset(a, 0, sizeof(a));
bool flag = false;
int l1, l2, r1, r2;
cin >> l1 >> r1 >> l2 >> r2;
for(int i = l1; i <= r1; i++) a[i] ++;
for(int i = l2; i <= r2; i++) a[i] ++;
for(int i = 1; i <= 50; i++)
if(a[i] == 2)
{
cout << i << endl;
flag = true;
break;
}
if(!flag) cout << min(l1, r1) + min(l2, r2) << endl;
}
int main()
{
int t;
cin >> t;
while(t--)
{
solve();
}
return 0;
}
B题
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <set>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <deque>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
const int N = 200010, M = 60;
int a[N], b[N];
char g[M][M];
bool cmp(int a, int b)
{
return a > b;
}
void solve()
{
int n, m;
cin >>n >>m;
int x = 1e9, y = 1e9;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
{
cin >> g[i][j];
if(g[i][j] == 'R')
{
if(x + y > i + j)
{
x = i;
y = j;
}
}
}
if(g[1][1] == 'R')
{
puts("Yes");
return ;
}
else{
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
if(g[i][j] == 'R')
{
if(i - x < 0 || j - y < 0)
{
puts("No");
return ;
}
}
}
}
}
puts("Yes");
}
int main()
{
int t;
cin >> t;
while(t--)
{
solve();
}
return 0;
}
C题
dalao写法,还不甚理解
原地址,dalao解法,相当妙
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <set>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <deque>
#include <map>
#define int long long
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
const int N = 200010, M = 60, INF = 1e9;
int a[N], b[N];
char g[M][M];
bool cmp(int a, int b)
{
return a > b;
}
int check(char s)
{
if(s >= 'a' && s <= 'z')
return s - 'a' + 10;
else return s - '0';
}
void solve()
{
string st;
cin >> st;
int n = st.size();
st = ' ' + st;
for(int i = 1; i <= n; i++) b[i] = b[i - 1] + (st[i] == '0');
int sum = count(st.begin(), st.end(), '1');
int ans = sum;
for(int i = sum; i <= n; i++)
{
ans = min(ans, b[i] - b[i - sum]);
}
cout << ans << endl;
}
signed main()
{
int t;
cin >> t;
while(t--)
{
solve();
}
return 0;
}

浙公网安备 33010602011771号