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

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

 E.

留坑

猜你喜欢

转载自www.cnblogs.com/smallhester/p/11394260.html