Codeforces Beta Round #1
A.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-10
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 150000 + 5;
const int mod = 998244353;
int main()
{
LL n,m,a;
cin >> n >> m >> a;
n = LL(ceil(n * 1.0 / a));
m = LL(ceil(m * 1.0 / a));
printf("%lld\n",n * m);
}
B.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-10
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 1e6 + 5;
const int mod = 998244353;
bool is(char a) {
if('A' <= a && a <= 'Z')
return true;
return false;
}
int check(char *s)
{
int len = strlen(s);
int ans = 0,pos1 = -1,pos2 = -1;
for(int i = 0 ;i < len; i++)
{
if(is(s[i]) && s[i] != 'R' && s[i] != 'C')
{
ans++;
continue;
}
if(s[i] == 'R') {
ans ++;
pos1 = i;
}
if(s[i] == 'C') {
ans++;
pos2 = i;
}
}
if(ans == 2 && pos1 != -1 && pos2 != -1 && pos2 - pos1 > 1)
return 1;
return 2;
}
void K(int n)
{
if(n>26)
K((n-1)/26);
printf("%c",(n-1)%26+'A');
}
int main()
{
int n;
cin >> n;
while(n--)
{
char s[MAXN];
scanf("%s",s);
int flag = check(s);
//debug(flag);
if(flag == 1) {
int len = strlen(s);
int pos1 = -1,pos2 = -1;
for(int i = 0 ;i < len; i++)
{
if(s[i] == 'R') {
pos1 = i;
}
if(s[i] == 'C') {
pos2 = i;
}
}
int p1 = 0,p2 = 0;
for(int i = pos1 + 1; i < pos2; i++) {
p1 *= 10;
p1 += (s[i] - '0');
}
for(int i = pos2 + 1; i < len; i++) {
p2 *= 10;
p2 += (s[i] - '0');
}
char ch = 'A';
K(p2);
printf("%d\n",p1);
} else {
int p1 = 0,p2 = 0;
int len = strlen(s);
int i;
for(i = 0; i < len; i++) {
if(is(s[i])) {
p1 *= 26;
p1 += s[i] - 'A' + 1;
}
else
break;
}
for(i ; i < len ; i++) {
p2 *= 10;
p2 += s[i] - '0';
}
printf("R%dC%d\n",p2,p1);
}
}
}
C.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 1e6 + 5;
const int mod = 998244353;
struct node{
double x,y;
};
double len(node a,node b) {
double tmp = sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
return tmp;
}
double gcd(double x,double y) {
while(fabs(x) > eps && fabs(y) > eps) {
if(x > y)
x -= floor(x / y) * y;
else
y -= floor(y / x) * x;
}
return x + y;
}
int main()
{
node a,b,c;
cin >> a.x >> a.y >> b.x >> b.y >> c.x >> c.y;
double lena = len(a,b);
double lenb = len(b,c);
double lenc = len(a,c);
double p = (lena + lenb + lenc) / 2.0;
double S = sqrt(p * (p - lena) * (p - lenb) * (p - lenc));
double R = lena * lenb * lenc / (4.0 * S);
double A = acos((lenb * lenb + lenc * lenc - lena * lena) / (2 * lenb * lenc));
double B = acos((lena * lena + lenc * lenc - lenb * lenb) / (2 * lena * lenc));
double C = acos((lena * lena + lenb * lenb - lenc * lenc) / (2 * lena * lenb));
double PI = acos(-1.0);
double n = PI / gcd(gcd(A,B),C);
double ans = n / 2 * R * R * sin(2 * PI / n);
printf("%.10f\n",ans);
}
Codeforces Beta Round #2
A.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 1e3 + 5;
const int mod = 998244353;
map<string,int>mp;
map<string,int>vis;
int main() {
int t;
cin >> t;
string s[MAXN];
int c[MAXN];
int maxx = -INF;
string ans;
for(int i = 0; i < t; i++) {
cin >> s[i];
scanf("%d",&c[i]);
mp[s[i]] += c[i];
}
map<string,int> :: iterator it;
for(it = mp.begin(); it != mp.end(); it ++) {
maxx = max(maxx,it -> second);
}
for(it = mp.begin(); it != mp.end(); it ++) {
if(it -> second == maxx) {
vis[it->first] = 1;
}
}
mp.clear();
for(int i = 0; i < t; i++) {
mp[s[i]] += c[i];
if(mp[s[i]] >= maxx && vis[s[i]] == 1) {
ans = s[i];
break;
}
}
cout << ans << endl;
}
B.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 1e3 + 5;
const int mod = 998244353;
int read(){
int ans=0,flag=1;char ch;
while((ch=getchar())<'0'||ch>'9') if(ch=='-') flag=-1;
ans=ch^48;
while((ch=getchar())>='0'&&ch<='9') ans=(ans<<3)+(ans<<1)+(ch^48);
return flag*ans;
}
int f[MAXN][MAXN][2];
int g[MAXN][MAXN][2];
void dfs(int x,int y,int k) {
if(x == 1 && y == 1) return;
if(g[x][y][k]) {
dfs(x - 1,y,k);
putchar('D');
} else {
dfs(x, y - 1,k);
putchar('R');
}
}
int main()
{
int n,x = 0,k;
n = read();
memset(f,0,sizeof f);
for(int i = 2; i <= n; i++)
for(int id = 0; id < 2; id++)
f[0][i][id] = f[i][0][id] = INF;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
k = read();
if (k == 0) {
x = i;
} else {
while (k % 2 == 0) {
f[i][j][0]++;
k /= 2;
}
while (k % 5 == 0) {
f[i][j][1]++;
k /= 5;
}
}
for (int id = 0; id < 2; id++) {
if (f[i - 1][j][id] < f[i][j - 1][id]) {
g[i][j][id] = 1;
f[i][j][id] += f[i - 1][j][id];
} else {
g[i][j][id] = 0;
f[i][j][id] += f[i][j - 1][id];
}
// if(g[i][j][id]=f[i-1][j][id]<f[i][j-1][id])
// f[i][j][id] += f[i-1][j][id];
// else
// f[i][j][id] += f[i][j-1][id];
}
}
}
if(f[n][n][1] < f[n][n][0])
k = 1;
else
k = 0;
if(x && f[n][n][1] > 1) {
printf("1\n");
for(int i = 2; i <= x; i++)
putchar('D');
for(int i = 2; i <= n; i++)
putchar('R');
for(int i = x + 1; i <= n; i++)
putchar('D');
} else {
printf("%d\n",f[n][n][k]);
dfs(n,n,k);
}
return 0;
}
C.
好像是啥模拟退火,先留坑
Codeforces Beta Round #3
A.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 2e5 + 5;
const int maxn = 2e5 + 10;
const int mod = 998244353;
int main()
{
char st[10];
char en[10];
cin >> st >> en;
int a1 = st[0] - 'a';
int a2 = st[1] - '0';
int b1 = en[0] - 'a';
int b2 = en[1] - '0';
int dx = a1 - b1;
int dy = a2 - b2;
// cout << dx << dy << endl;
int ans = max(abs(dx),abs(dy));
printf("%d\n",ans);
for(int i = 0;i < ans; i++)
{
if(i < abs(dx) && dx < 0)
putchar('R');
if(i < abs(dx) && dx > 0)
putchar('L');
if(i < abs(dy) && dy < 0)
putchar('U');
if(i < abs(dy) && dy > 0)
putchar('D');
cout << endl;
}
}
B.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 2e5 + 5;
const int maxn = 2e5 + 10;
const int mod = 998244353;
struct node{
int id,val,kind;
}a[MAXN];
bool cmp(node a,node b)
{
if(a.kind != b.kind)
return a.kind > b.kind;
return a.val > b.val;
}
int main() {
int n, v;
cin >> n >> v;
for (int i = 1; i <= n; i++) {
scanf("%d %d", &a[i].kind, &a[i].val);
a[i].id = i;
}
sort(a + 1, a + 1 + n, cmp);
deque<node> que;
int sum = 0;
int i;
for (i = 1; i <= n; i++) {
if (v == 0)
break;
if (v >= 2 && a[i].kind == 2) {
node tmp;
tmp = a[i];
que.push_front(tmp);
v -= 2;
sum += a[i].val;
}
if (v >= 1 && a[i].kind == 1) {
node tmp;
tmp = a[i];
que.push_back(tmp);
v -= 1;
sum += a[i].val;
}
}
for(i ; i <= n; i++)
if(a[i].kind == 1)
break;
if (i <= n) {
for (i; i <= n; i++) {
node tmp = que.front();
if (tmp.kind == 2 && tmp.val < (a[i].val + a[i + 1].val)) {
que.pop_front();
que.push_back(a[i]);
que.push_back(a[i + 1]);
sum -= tmp.val;
sum += (a[i].val + a[i + 1].val);
i++;
}
}
}
int num[MAXN];
int pos = 0;
while(que.size())
{
node tmp = que.front();
que.pop_front();
num[pos++] = tmp.id;
}
sort(num,num + pos);
cout << sum << endl;
for(int i = 0 ; i < pos; i++)
printf("%d ",num[i]);
}
C.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 2e5 + 5;
const int maxn = 2e5 + 10;
const int mod = 998244353;
char s[10][10];
bool ill()
{
int a = 0;
int b = 0;
for(int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (s[i][j] == 'X')
a++;
if (s[i][j] == '0')
b++;
}
}
int tmp = a - b;
if(tmp == 0 || tmp == 1)
return true;
return false;
}
int de()
{
int a = 0;
int b = 0;
for(int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (s[i][j] == 'X')
a++;
if (s[i][j] == '0')
b++;
}
}
int tmp = a - b;
return tmp;
}
bool firstwin()
{
for(int i = 0 ; i < 3; i ++ ) {
if (s[i][0] == s[i][1] && s[i][1] == s[i][2] && s[i][2] == 'X') {
return true;
}
}
for(int i = 0; i < 3; i++) {
if(s[0][i] == s[1][i] && s[1][i] == s[2][i] && s[0][i] == 'X')
return true;
}
if(s[0][0] == s[1][1] && s[1][1] == s[2][2] && s[0][0] == 'X')
return true;
if(s[2][0] == s[1][1] && s[1][1] == s[0][2] && s[1][1] == 'X')
return true;
return false;
}
bool secondwin()
{
for(int i = 0 ; i < 3; i ++ ) {
if (s[i][0] == s[i][1] && s[i][1] == s[i][2] && s[i][2] == '0') {
return true;
}
}
for(int i = 0; i < 3; i++) {
if(s[0][i] == s[1][i] && s[1][i] == s[2][i] && s[0][i] == '0')
return true;
}
if(s[0][0] == s[1][1] && s[1][1] == s[2][2] && s[0][0] == '0')
return true;
if(s[2][0] == s[1][1] && s[1][1] == s[0][2] && s[1][1] == '0')
return true;
return false;
}
bool man()
{
int ans = 0;
for(int i = 0; i < 3; i++)
for(int j = 0 ;j < 3; j++)
if(s[i][j] != '.')
ans ++;
return ans == 9;
}
int main()
{
for(int i = 0 ;i < 3; i++)
cin >> s[i];
if(ill() == false || (firstwin() && secondwin()))
{
puts("illegal");
return 0;
}
if(secondwin() && de() == 1)
{
puts("illegal");
return 0;
}
if(firstwin() && de() == 0)
{
puts("illegal");
return 0;
}
if(firstwin())
{
puts("the first player won");
return 0;
}
if(secondwin())
{
puts("the second player won");
return 0;
}
if(man())
{
puts("draw");
return 0;
}
if(de() == 0)
{
puts("first");
return 0;
}
if(de() == 1)
{
puts("second");
return 0;
}
}
D.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 2e5 + 5;
const int maxn = 2e5 + 10;
const int mod = 998244353;
struct node{
int s,pos;
node(){}
node(int xx,int pp): s(xx),pos(pp){}
bool operator < (node a)const {
return s > a.s; //s小的优先级高
}
};
priority_queue<node>que;
int main()
{
char s[MAXN];
scanf("%s",s);
int len = strlen(s);
LL ans = 0;
int flag = 0;
int wrong = 0;
for(int i = 0 ; i < len; i++)
{
if(s[i] == '(')
flag++;
else if(s[i] == ')')
flag--;
else {
int a,b;
scanf("%d %d",&a,&b);
flag--;
ans += 1LL * b;
que.push(node(a - b,i));
s[i] = ')';
}
if(flag < 0) {
if(que.empty()) {
wrong = 1;
} else {
flag += 2;
node tmp = que.top();
que.pop();
ans += tmp.s;
s[tmp.pos] = '(';
}
}
}
// debug(flag);
if(wrong || flag != 0)
puts("-1");
else {
cout << ans << endl;
printf("%s",s);
}
}
Codeforces Beta Round #4(Div. 2 Only)
A.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 2e5 + 5;
const int maxn = 2e5 + 10;
const int mod = 998244353;
int main()
{
int w;
cin >> w;
if(w % 2 == 1 || w == 2)
puts("NO");
else
puts("YES");
}
B.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 234 + 5;
const int maxn = 2e5 + 10;
const int mod = 998244353;
int main()
{
int d,sum;
cin >> d >> sum;
int minn = 0;
int maxx = 0;
int a[MAXN];
int b[MAXN];
for(int i = 0;i < d; i++) {
cin >> a[i] >> b[i];
minn += a[i];
maxx += b[i];
}
if(minn <= sum && sum <= maxx) {
puts("YES");
int tmp = sum - minn;
for(int i = 0; i < d; i++) {
if(b[i] > a[i] && tmp > 0) {
int xx = min(b[i] - a[i],tmp);
tmp -= xx;
a[i] += xx;
}
printf("%d ",a[i]);
}
} else {
puts("NO");
}
}
C.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 234 + 5;
const int maxn = 2e5 + 10;
const int mod = 998244353;
map<string,int>mp;
int main()
{
int t;
cin >> t;
while(t--) {
string s;
cin >> s;
if(mp[s] == 0) {
mp[s] ++;
cout << "OK" <<endl;
} else {
cout <<s << mp[s] <<endl;
mp[s]++;
}
}
}
D.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
#define ll long long
#define LL long long
const int MAXN = 1e5 + 5;
const int mod = 998244353;
struct node{
int w,h;
int id;
}a[MAXN];
bool cmp(node a,node b) {
if(a.w != b.w) return a.w < b.w;
return a.h < b.h;
}
int dp[MAXN];
int path[MAXN];
void print(int n) {
if(path[n] == -1) {
printf("%d ",a[n].id);
return ;
} else {
print(path[n]);
printf("%d ",a[n].id);
}
}
int main() {
int n, w, h;
cin >> n >> w >> h;
int pos = 0;
for(int i = 1; i <= n; i++) {
int w1,h1;
cin >> w1 >> h1;
if(w1 > w && h1 > h) {
a[pos].w = w1;
a[pos].h = h1;
a[pos].id = i;
pos++;
}
}
if(pos == 0)
{
cout << 0 << endl;
return 0;
}
sort(a, a + pos, cmp);
for(int i = 0; i < pos; i++) {
dp[i] = 1;
path[i] = i;
}
memset(path, -1, sizeof path);
int maxlen = 1,biao = 0;
for(int i = 0; i < pos; i++) {
for(int j = 0; j < i; j++) {
if(a[j].h < a[i].h && a[j].w < a[i].w && dp[i] < (dp[j] + 1)) {
dp[i] = dp[j] + 1;
if(dp[i] > maxlen) maxlen = dp[i];
path[i] = j;
}
}
}
int tmp,cmp = 0;
for(int i = 0; i < n; i++) {
if(dp[i] > cmp) {
cmp = dp[i];
tmp = i;
}
}
cout << maxlen << endl;
// debug(tmp);
print(tmp);
}
Codeforces Beta Round #5
A.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 2e5 + 5;
const int mod = 998244353;
int main()
{
char a[MAXN];
int num = 0;
int sum = 0;
while(gets(a))
{
if(a[0] == '+')
num++;
else if(a[0] == '-')
num--;
else {
int pos;
for(int i = 0; i < strlen(a); i++)
if(a[i] == ':') {
pos = i;
break;
}
sum += (strlen(a) - 1 - pos) * num;
}
}
cout << sum << endl;
}
B.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int maxn = 1e3 + 5;
const int mod = 998244353;
string s[maxn];
int main()
{
int n = 0;
int len = 0;
while (getline(cin,s[n])) {
len = max(len,(int)s[n].size());
n++;
}
for(int i = 0; i < len + 2; i++)
putchar('*');
cout << endl;
bool flag = true;
for(int i = 0; i < n; i++) {
putchar('*');
int tmp = len - s[i].size();
int k1 = tmp / 2,k2 = tmp / 2;
if(tmp % 2 != 0) {
if(flag == false) {
k1 ++;
flag = true;
}
else {
k2 ++;
flag = false;
}
}
for(int j = 0; j < k1; j++)
putchar(' ');
cout << s[i];
for(int j = 0; j < k2; j++)
putchar(' ');
putchar('*');
cout << endl;
}
for(int i = 0; i < len + 2; i++)
putchar('*');
}
/*
************
* This is *
* *
*Codeforces*
* Beta *
* Round *
* 5 *
************
*/
C.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int maxn = 1e6 + 5;
const int mod = 998244353;
int f[maxn];
char a[maxn];
int maxlen,num,n;
stack<int>s;
void init() {
memset(f,0,sizeof f);
maxlen = 0;
num = 1;
}
int main()
{
init();
scanf("%s",a);
n = strlen(a);
for(int i = 0 ; i < n; i++) {
if(a[i] == '(')
s.push(i);
else {
if(!s.empty()) {
int t = s.top();
s.pop();
f[i] = f[t - 1] + i - (t - 1);
}
if(f[i] > maxlen) {
maxlen = f[i];
num = 1;
} else if(f[i] == maxlen)
num++;
}
}
if(maxlen) printf("%d %d\n",maxlen,num);
else printf("0 1\n");
}
D.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int maxn = 1e6 + 5;
const int mod = 998244353;
int main()
{
double a,v,l,d,w;
cin >> a >> v >> l >> d >> w;
double t1,t2,vv,vd;
if(v <= w) {
if(2.0 * d * a <= v * v) {
t1 = sqrt(2.0 * d / a);
vd = sqrt(2.0 * d * a);
} else {
t1 = v / a + (d - v * v * 0.5 / a) / v;
vd = v;
}
} else if(2.0 * d * a <= w * w) {
t1 = sqrt(2.0 * d / a);
vd = sqrt(2.0 * d * a);
} else {
vv = sqrt(a * d + 0.5 * w * w);
if(v >= vv && vv >= w)
t1 = (2.0 * vv - w) / a;
else {
t1 = v / a;
t1 += (d - (v * v - 0.5 * w * w) / a) / v;
t1 += (v - w) / a;
}
vd = w;
}
if(2.0 * a * (l - d) < v * v - vd * vd) {
t2 = (sqrt(2.0 * a * (l - d) + vd * vd) - vd) / a;
} else {
t2 = (v - vd) / a;
t2 += ((l - d) - 0.5 * (v * v / a - vd * vd / a)) / v;
}
printf("%.10f\n",t1 + t2);
}
E.
https://blog.youkuaiyun.com/qq_38759433/article/details/86514227
include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int maxn = 1e6 + 5;
const int mod = 998244353;
LL h[maxn],hh[maxn],same[maxn],l[maxn],r[maxn];
int main()
{
LL n,maxh,pos;
scanf("%lld",&n);
for(LL i = 0; i < n; ++i) scanf("%lld",&h[i]);
maxh = h[0],pos = 0;
for(LL i = 1; i < n; ++i) {
if(h[i] > maxh) {
maxh = h[i];
pos = i;
}
}
for(LL i = 0; i < n; ++i) {
hh[i] = h[(pos + i) % n];
}
hh[n] = hh[0];
same[n] = 0;
for(LL i = n - 1; i >= 0; --i) {
r[i] = i + 1;
while(r[i] < n && hh[i] > hh[r[i]])
r[i] = r[r[i]];
if(r[i] < n && hh[i] == hh[r[i]]) {
same[i] = same[r[i]] + 1;
r[i] = r[r[i]];
}
}
l[0] = 0;
for(LL i = 1; i <= n; ++i) {
l[i] = i - 1;
while(l[i] > 0 && hh[i] >= hh[l[i]])
l[i] = l[l[i]];
}
LL ans = 0;
for(LL i = 0; i < n; ++i) {
ans += same[i];
if(hh[i] < hh[0]) {
if(l[i] == 0 && r[i] == n)
ans++;
else
ans += 2;
}
}
cout << ans << endl;
}
Codeforces Beta Round #6 (Div. 2 Only)
A.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int maxn = 1e5 + 5;
const int mod = 998244353;
int a[10];
int main()
{
for(int i = 0; i < 4; i++)
cin >> a[i];
sort(a, a + 4);
if(a[2] < (a[0] + a[1]) || a[3] < (a[2] + a[1]))
puts("TRIANGLE");
else if(a[2] == (a[0] + a[1]) || a[3] == (a[0] + a[1]) || a[3] == (a[2] + a[1]))
puts("SEGMENT");
else
puts("IMPOSSIBLE");
}
B.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int maxn = 1e2 + 5;
const int mod = 998244353;
char s[maxn][maxn];
set<char>se;
int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,1,-1};
int main() {
int n, m;
char ch;
cin >> n >> m >> ch;
for (int i = 1; i <= n; i++)
scanf("%s", s[i] + 1);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (s[i][j] == ch) {
for (int k = 0; k < 4; k++) {
int nx = i + dx[k];
int ny = j + dy[k];
if(1 <= nx && nx <= n && 1 <= ny && ny <= m && s[nx][ny] != '.' && s[nx][ny] != ch) {
// cout << s[nx][ny] << endl;
se.insert(s[nx][ny]);
}
}
}
}
}
cout << se.size() << endl;
}
C.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int maxn = 1e5 + 5;
const int mod = 998244353;
deque<int>que;
int main()
{
int n;
cin >> n;
int t[maxn];
for(int i = 1; i <= n; i++) {
cin >> t[i];
}
int st = 1, en = n;
int cnta = 0,cntb = 0;
int aa = 0,bb = 0;
while(st <= en) {
if(aa <= bb) {
aa += t[st++];
cnta++;
} else {
bb += t[en--];
cntb++;
}
}
printf("%d %d\n",cnta,cntb);
}
D.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int maxn = 1e5 + 5;
const int mod = 998244353;
int n,a,b;
int h[maxn];
vector<int>tmp;
vector<int>v;
int ans = inf;
void dfs(int x,int times) {
if(times >= ans) return;
if(x == n) {
if(h[x] < 0) {
v = tmp;
ans = times;
}
return;
}
for(int i = 0; i <= max(h[x - 1] / b + 1,max(h[x] / a + 1,h[x + 1] / b + 1)); i++) {
if(h[x - 1] < b * i) {
h[x - 1] -= b * i;
h[x] -= a * i;
h[x + 1] -= b * i;
for (int j = 0; j < i; j++) tmp.push_back(x);
dfs(x + 1, times + i);
for (int j = 0; j < i; j++) tmp.pop_back();
h[x - 1] += b * i;
h[x] += a * i;
h[x + 1] += b * i;
}
}
}
int main()
{
cin >> n >> a >> b;
for(int i = 1; i <= n; i++) cin >> h[i];
dfs(2,0);
cout << ans << endl;
for(int i = 0; i < v.size(); i++)
printf("%d ",v[i]);
}
E.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int maxn = 1e5 + 5;
const int mod = 998244353;
int n,k;
int a[maxn];
int ma[maxn << 2],mi[maxn << 2];
void build(int o,int l,int r) {
if(l == r) {
ma[o] = a[l];
mi[o] = a[l];
} else {
int mid = (l + r) >> 1;
build(o << 1,l ,mid);
build(o << 1 | 1,mid + 1,r);
ma[o] = max(ma[o << 1],ma[o << 1 | 1]);
mi[o] = min(mi[o << 1],mi[o << 1 | 1]);
}
}
int querymax(int o,int l,int r,int ql,int qr) {
if(ql > r || qr < l) return -1;
if(ql <= l && qr >= r) return ma[o];
int mid = (l + r) >> 1;
int p1 = querymax(o << 1 ,l, mid,ql,qr);
int p2 = querymax(o << 1 | 1,mid + 1, r, ql,qr);
return max(p1,p2);
}
int querymin(int o,int l,int r,int ql,int qr) {
if(ql > r || qr < l) return inf;
if(ql <= l && qr >= r) return mi[o];
int mid = (l + r) >> 1;
int p1 = querymin(o << 1 ,l, mid,ql,qr);
int p2 = querymin(o << 1 | 1,mid + 1, r, ql,qr);
return min(p1,p2);
}
pair<int,int>p[maxn];
int main()
{
cin >> n >> k;
for(int i = 1; i<= n; i++) cin >> a[i];
build(1,1,n);
int l ,r, tmp, cnt;
l = r = tmp = 1;
cnt = 0;
while(l <= n) {
int fx = querymax(1,1,n,l,r);
int fy = querymin(1,1,n,l,r);
if(fx - fy <= k) {
if(r - l + 1 == tmp) {
p[cnt].first = l;
p[cnt].second = r;
cnt ++;
} else if(r - l + 1 > tmp) {
cnt = 0;
tmp = r - l + 1;
p[cnt].first = l;
p[cnt].second = r;
cnt++;
}
r++;
} else l++;
if(r > n) {
r = n;l++;
}
if(l > r) r = l;
}
printf("%d %d\n",tmp,cnt);
for(int i = 0; i < cnt; i++) printf("%d %d\n",p[i].first,p[i].second);
}
Codeforces Round #579 (Div. 3)
A.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-10
typedef long long LL;
const int MAXN = 32000 + 5;
const int mod = 998244353;
int a[MAXN];
int main()
{
int t;
cin >> t;
while(t--) {
int n;
cin >> n;
int pos;
for(int i = 1; i <= n; i++)
{
cin >> a[i];
if(a[i] == 1)
pos = i;
}
for(int i = n + 1; i <= 2 * n; i++)
a[i] = a[i - n];
int flag = 0;
int cnt = 1;
int ans = 0;
for(int i = pos; i < pos + n; i++) {
if(a[i] == cnt){
ans++;
cnt++;
}
}
if(ans == n)
flag =1;
ans = 0;
cnt =1;
for(int i = pos + n; i > pos; i--) {
if(a[i] == cnt) {
ans++;
cnt++;
}
}
if(ans == n)
flag =1;
if(flag)
puts("YES");
else
puts("NO");
}
}
B.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-10
typedef long long LL;
const int MAXN = 1e4 + 5;
const int mod = 998244353;
int a[MAXN];
int main()
{
int t;
cin >> t;
while(t--) {
memset(a,0,sizeof a);
int n,x;
cin >> n;
for(int i = 1; i <= 4 * n; i++)
cin >> a[i];
sort(a + 1,a + 4 * n + 1);
LL ans = a[1] * a[4 * n];
int flag = 1;
for(int i = 2;i <= 2 * n; i++) {
if(i % 2 == 0 && a[i] != a[i - 1])
flag = 0;
if (a[i] * a[4 * n + 1 - i] != ans)
flag = 0;
}
if(flag)
puts("YES");
else
puts("NO");
}
}
C.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-10
typedef long long LL;
const int MAXN = 150000 + 5;
const int mod = 998244353;
LL gcd(LL a,LL b) {
return b == 0 ? a : gcd(b,a % b);
}
LL num(LL x){
if(x == 1)
return 1;
LL ans = 0;
LL tmp = LL(sqrt(x * 1.0));
if(tmp * tmp == x)
ans++;
if(ans == 0) {
for (int i = 1; i <= LL(sqrt(x * 1.0)); i++) {
if (x % i == 0)
ans += 2;
}
} else {
for (int i = 1; i < LL(sqrt(x * 1.0)); i++) {
if (x % i == 0)
ans += 2;
}
}
return ans;
}
int main()
{
int n;
cin >> n;
LL x,y;
scanf("%lld",&x);
for(int i = 1; i < n; i++) {
scanf("%lld",&y);
if(x != 1)
x = gcd(x,y);
}
printf("%lld\n",num(x));
}
D1 && D2.
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<list>
#include<math.h>
#include<vector>
#include<stack>
#include<string>
#include<cstring>
#include<string.h>
using namespace std;
typedef long long LL;
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
const int MAXN = 2e5 + 10;
const double eps = 1e-8;
char a[MAXN],b[MAXN];
int c1[MAXN],c2[MAXN];
int main()
{
scanf("%s %s",a + 1,b + 1);
int lena = strlen(a + 1);
int lenb = strlen(b + 1);
int max_len = 0;
int j = 1,i;
for(i = 1; i <= lena; i++) {
if(a[i] == b[j]) {
c1[j] = i;
j++;
if(j == lenb + 1) break;
continue;
}
}
max_len = max(max_len, lena - i);
j = lenb;
for(i = lena; i >= 1; i--) {
if(a[i] == b[j]) {
c2[j] = i;
j--;
if(j == 0) break;
continue;
}
}
max_len = max(max_len,i - 1);
for( i = 2; i <= lenb; i++) {
max_len = max(max_len,c2[i] - c1[i - 1] - 1);
}
cout << max_len << endl;
}
E.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-10
typedef long long LL;
const int MAXN = 150000 + 5;
const int mod = 998244353;
int main()
{
int vis[MAXN];
int a[MAXN];
int n;
cin >> n;
for(int i = 0; i < n; i++)
scanf("%d",&a[i]);
sort(a,a + n);
memset(vis,0,sizeof vis);
int ans = 0;
int tmp1,tmp2,tmp3;
for(int i = 0; i < n; i++)
{
tmp1 = a[i] - 1;
tmp2 = a[i];
tmp3 = a[i] + 1;
if(tmp1 > 0 && vis[tmp1] == 0) {
ans++;
vis[tmp1] = 1;
continue;
}
if(tmp2 > 0 && vis[tmp2] == 0)
{
ans++;
vis[tmp2] = 1;
continue;
}
if(tmp3 > 0 && vis[tmp3] == 0)
{
ans++;
vis[tmp3] = 1;
continue;
}
}
cout << ans <<endl;
}
F1.
F2.
Codeforces Round #580 (Div. 2)
A.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 1e3 + 5;
const int mod = 998244353;
map<int,int>mpa;
map<int,int>mpb;
int a[MAXN],b[MAXN];
int main()
{
int n;
cin >> n;;
for(int i = 0; i < n; i++)
{
cin >> a[i];
mpa[a[i]] = 1;
}
int m;
cin >> m;
for(int i = 0; i < m; i++)
{
cin >> b[i];
mpb[b[i]] = 1;
}
for(int i = 0; i < n; i++)
{
for(int j = 0 ; j < m; j++)
{
int t = a[i] + b[j];
if(mpa[t] == 0 && mpb[t] == 0)
{
printf("%d %d\n",a[i],b[j]);
return 0;
}
}
}
}
B.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 1e5 + 5;
const int mod = 998244353;
int a[MAXN];
int main()
{
int n;
cin >> n;
int num0 = 0;
LL sum = 0;
for(int i = 0 ; i < n; i++)
{
cin >> a[i];
if(a[i] > 1)
{
sum += (a[i] - 1);
a[i] = 1;
}
if(a[i] < -1)
{
sum += (-1 - a[i]);
a[i] = -1;
}
if(a[i] == 0)
num0 ++;
}
int ji = 1;
for(int i = 0; i < n; i++)
{
if(a[i] != 0)
ji *= a[i];
}
if(num0 > 0)
{
printf("%lld\n",sum + num0);
} else {
if(ji == 1)
printf("%lld\n",sum);
else
printf("%lld\n",sum + 2LL);
}
}
C.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 2e5 + 5;
const int mod = 998244353;
int a[MAXN];
int main()
{
int n;
cin >> n;
if(n % 2 == 0) {
printf("NO\n");
} else {
int num = 1;
for(int i = 1; i <= n; i++) {
if(i % 2 == 1) {
a[i] = num++;
a[i + n] = num++;
} else {
a[i + n] = num++;
a[i] = num++;
}
}
puts("YES");
for(int i = 1; i <= 2 * n; i++)
printf("%d%c",a[i],i == 2 * n ? '\n' : ' ');
}
}
D.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 1e3 + 5;
const int mod = 998244353;
LL a[MAXN];
vector<int>v[MAXN];
int mp[MAXN][MAXN];
int g[MAXN][MAXN];
int floyd(int n) {
int res = MAXN;
for (int k = 1; k <= n; k++)
{
for (int i = 1; i < k; i++)
for (int j = i + 1; j < k; j++)
res = min(res, g[i][j] + mp[i][k] + mp[k][j]);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
g[i][j] = g[j][i] = min(g[i][j], g[i][k] + g[k][j]);
}
return res;
}
int main() {
int n;
cin >> n;
int num = 1;
for (int i = 0; i < n; i++) {
LL x;
cin >> x;
if (x != 0 && num < 200) {
a[num++] = x;
}
}
if (num > 128)
printf("3\n");
else {
// debug(num);
num--;
for (int i = 1; i <= num; i++)
for (int j = 1; j <= num; j++)
if (i != j)
mp[i][j] = g[i][j] = MAXN;
for (int i = 1; i <= num; i++) {
for (int j = i + 1; j <= num; j++) {
if ((a[i] & a[j]) != 0) {
mp[i][j] = 1;
mp[j][i] = 1;
g[i][j] = g[j][i] = 1;
// printf("%d %d\n", i, j);
}
}
}
int ans = floyd(num);
if(ans == MAXN)
cout << -1 << endl;
else
cout << ans << endl;
}
}
E.
留坑
F.
留坑
Codeforces Round #581 (Div. 2)
A.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 1e3 + 5;
const int mod = 998244353;
int main()
{
char s[MAXN];
scanf("%s",s);
int len = strlen(s);
int ans =0 ;
for(int i = 1; i < len; i++)
if(s[i] == '1')
ans++;
char a[MAXN];
for(int i = 0; i < len; i++)
a[i] = s[len - 1 - i];
// cout << a << endl;
int tmp = 0;
for(int i = 0; i < len; i++)
{
if(i % 2 == 0)
tmp += 1;
}
if(ans == 0 && len % 2 == 1)
tmp --;
cout << tmp << endl;
}
B.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 1e3 + 5;
const int mod = 998244353;
int main()
{
int n,l,r;
cin >> n >> l >> r;
LL minn = n - l + 1;
LL num = 2;
for(int i = 0; i < l - 1; i++) {
minn += num;
num *= 2;
}
LL maxx = 1;
num = 2;
for(int i = 0; i < r - 1; i++)
{
maxx += num;
num *= 2;
}
num /= 2;
maxx += (n - r) * num;
printf("%lld %lld\n",minn,maxx);
}
C.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 1e2 + 5;
const int mod = 998244353;
char s[MAXN][MAXN];
int mp[MAXN][MAXN];
const int N = 1e6 + 10;
struct node{
int v,k;
}stk[N];
int n;
void floyd() {
for (int k = 1; k <= n; k++)
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
mp[i][j] = min(mp[i][j], mp[i][k] + mp[k][j]);
}
int x[N];
int main()
{
cin >> n;
for(int i = 1; i <= n; i++)
scanf("%s",s[i] + 1);
for(int i = 1;i <= n; i++)
{
for(int j =1; j <= n; j++)
{
if(s[i][j] == '1')
mp[i][j] = 1;
else if(i == j)
mp[i][j] = 0;
else
mp[i][j] = INF;
}
}
floyd();
int m;
cin >> m;
for(int i = 0; i < m; i++)
{
scanf("%d",&x[i]);
}
int top = 0;
stk[top++] = {x[0],0};
stk[top++] = {x[1],1};
for(int i =2; i < m; i++)
{
while(mp[stk[top - 2].v][x[i]] == i - stk[top - 2].k)
--top;
stk[top++] = node{x[i],i};
}
cout << top << endl;
printf("%d",stk[0].v);
for(int i = 1; i < top; i++)
printf(" %d",stk[i].v);
cout << endl;
}
D1 && D2.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int MAXN = 2e5 + 5;
const int maxn = 2e5 + 10;
const int mod = 998244353;
char a[MAXN];
int main()
{
scanf("%s",a + 1);
int len = strlen(a + 1);
int cnt = 0;
for(int i = len; i >= 1; i--) {
if(a[i] == '0')
cnt++;
else {
if(cnt == 0)
a[i] = '0';
else
cnt --;
}
}
printf("%s",a + 1);
}
E. ********
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int maxn = 2e3 + 5;
const int mod = 998244853;
int C[maxn * 2][maxn * 2], dp[maxn][maxn], g[maxn][maxn];
int n, m;
int main() {
cin >> n >> m;
for(int i = 0; i <= n + m; ++i) {
C[i][0] = 1;
for(int j = 1; j <= i; ++j)
C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mod;
}
for(int i = 1; i <= m; ++i)
g[0][i] = 1;
for(int i = 1; i <= n; ++i) {
for(int j = i; j <= m; ++j)
g[i][j] = (g[i - 1][j] + g[i][j - 1]) % mod;
}
for(int i = 1; i <= n; ++i) {
dp[i][0] = i;
for(int j = 1; j <= m ; ++j) {
dp[i][j] = (C[i + j - 1][j] + dp[i - 1][j]) % mod;
dp[i][j] = (dp[i][j] + dp[i][j - 1]) % mod;
dp[i][j] = (dp[i][j] + (g[i][j - 1] - C[i + j - 1][i] + mod) % mod) % mod;
}
}
printf("%d\n",dp[n][m]);
}
Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)
A.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int maxn = 1e5 + 5;
const int mod = 998244353;
int f[maxn];
int main()
{
int t;
cin >> t;
while (t--) {
int a,b,n;
cin >> a >> b >> n;
int tmp = a xor b;
if(n % 3 == 0)
cout << a << endl;
else if(n % 3 == 1)
cout << b << endl;
else cout << tmp << endl;
}
}
B.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int maxn = 2e3 + 5;
const int mod = 998244353;
int a[maxn];
map<int,int>mp;
int main() {
int n;
cin >> n;
for(int i = 0; i < n; i++) cin >> a[i];
int ans = 0;
for(int i = 0; i < n; i++) {
mp[a[i]]++;
if(mp[a[i]] > 1) break;
int cnt = i + 1;
map<int,int>w1;
for(int j = n - 1; j > i; j--) {
w1[a[j]] ++;
if(mp[a[j]] + w1[a[j]] > 1) break;
cnt++;
}
// printf("%d %d\n",i,cnt);
ans = max(ans,cnt);
}
map<int,int>w1;
int cnt = 0;
for(int j = n - 1; j >= 0; j--) {
w1[a[j]]++;
if(w1[a[j]] > 1) break;
cnt++;
}
ans = max(ans,cnt);
cout << n - ans << endl;
}
C.
卡诺图,每行每列的异或后的值一样
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int maxn = 2e3 + 5;
const int mod = 998244353;
int a[maxn][maxn];
int main()
{
int n;
cin >> n;
int cnt = 0;
for(int j = 1; j <= n - 1; j += 2) {
for(int i = 1; i <= n - 1; i += 2) {
a[i][j] = cnt++;
a[i][j + 1] = cnt++;
a[i + 1][j] = cnt++;
a[i + 1][j + 1] = cnt++;
}
}
for(int i = 1; i<= n; i++)
for(int j = 1; j <= n; j++)
printf("%d%c",a[i][j],j == n ? '\n' : ' ');
}
D.
题意:一个排列,给出当前数之前比其小的数的和,求排列
思路:最后一个数所涵盖的之和肯定是一串连续的 1 - k 的和,二分求其值,树状数组中将其值归零,求倒数第二个的连续之和
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
typedef long long LL;
typedef long long ll;
const int maxn = 2e5 + 5;
const int mod = 998244353;
int lowbit(int x) {
return x & -x;
}
LL c[maxn];
int n;
void add(int x,int y) {
for(int i = x; i <= n; i += lowbit(i))
c[i] += y;
}
LL getsum(int x) {
LL ans = 0;
for(int i = x; i; i -= lowbit(i))
ans += c[i];
return ans;
}
LL s[maxn];
int ans[maxn];
int main()
{
memset(c,0,sizeof c);
cin >> n;
for (int i = 1; i <= n; i++)
scanf("%lld",&s[i]);
for (int i = 1; i <= n; i++)
add(i,i);
for(int i = n; i >= 1; i--) {
int l = 1,r = n;
while(r > l) {
int mid = (l + r + 1) >> 1;
if(getsum(mid - 1) > s[i])
r = mid - 1;
else
l = mid;
}
ans[i] = l;
add(ans[i],-ans[i]);
}
for(int i = 1; i <= n; i++) printf("%d%c",ans[i],i == n ? '\n' : ' ');
}
EFGH
先留坑