codeforces contest

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("*********
")
#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 * m);
}
View Code

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("*********
")
#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
",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
",p2,p1);
        }
    }
}
View Code

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("*********
")
#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
",ans);
}
View Code

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("*********
")
#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;
}
View Code

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("*********
")
#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
");
        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
",f[n][n][k]);
        dfs(n,n,k);
    }
    return 0;
}
View Code

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("*********
")
#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
",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;
    }
 
}
View Code

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("*********
")
#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]);
}
View Code

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("*********
")
#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;
    }
 
}
View Code

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("*********
")
#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);
    }
}
View Code

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("*********
")
#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");
}
View Code

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("*********
")
#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");
   }
}
View Code

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("*********
")
#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]++;
        }
    }
}
View Code

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("*********
")
#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);
}
View Code

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("*********
")
#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;
}
View Code

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("*********
")
#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    *
************
 
 */
View Code

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("*********
")
#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
",maxlen,num);
    else printf("0 1
");
 
}
View Code

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("*********
")
#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
",t1 + t2);
}
View Code

E.

https://blog.csdn.net/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("*********
")
#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;
}
View Code

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("*********
")
#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");
}
View Code

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("*********
")
#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;
}
View Code

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("*********
")
#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
",cnta,cntb);
}
View Code

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("*********
")
#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]);
}
View Code

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("*********
")
#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
",tmp,cnt);
    for(int i = 0; i < cnt; i++) printf("%d %d
",p[i].first,p[i].second);
}
View Code

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");
    }
}
View Code

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");
    }
}
 
View Code

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
",num(x));
}
 
 
View Code

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("*********
")
#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;
}
View Code

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;
}
View Code

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("*********
")
#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
",a[i],b[j]);
                return 0;
            }
        }
    }
}
View Code

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("*********
")
#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
",sum + num0);
    } else {
        if(ji == 1)
            printf("%lld
",sum);
        else
            printf("%lld
",sum + 2LL);
    }
}
View Code

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("*********
")
#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
");
    } 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 ? '
' : ' ');
    }
}
View Code

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("*********
")
#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
");
    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
", i, j);
                }
            }
        }
        int ans = floyd(num);
        if(ans == MAXN)
            cout << -1 << endl;
        else
            cout << ans << endl;
    }
}
View Code

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("*********
")
#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;
}
View Code

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("*********
")
#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
",minn,maxx);
 
 
}
View Code

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("*********
")
#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;
}
View Code

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("*********
")
#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);
}
View Code

 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("*********
")
#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
",dp[n][m]);
}
View Code

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("*********
")
#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;
 
        }
}
View Code

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("*********
")
#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
",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;
}
View Code

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("*********
")
#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 ? '
' : ' ');
}
View Code

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("*********
")
#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 ? '
' : ' ');
}
View Code

EFGH

先留坑

原文地址:https://www.cnblogs.com/smallhester/p/11394260.html