codeforces603

A. Sweet Problem

#include
#define rep(i, n) for(int i=0;i!=n;++i)
#define per(i, n) for(int i=n-1;i>=0;--i)
#define Rep(i, sta, n) for(int i=sta;i!=n;++i)
#define rep1(i, n) for(int i=1;i<=n;++i)
#define per1(i, n) for(int i=n;i>=1;--i)
#define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
#define L k<<1
#define R k<<1|1
#define inf (0x3f3f3f3f)
#define llinf (1e18)
#define mid (tree[k].l+tree[k].r)>>1
#define ALL(A) A.begin(),A.end()
#define SIZE(A) ((int)A.size())
#define PII pair
typedef long long i64;
using namespace std;
int main() {
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int t;
    cin >> t;
    while(t--){
        vector<int> arr(3);
        for(auto& v:arr)
            cin >> v;
        sort(arr.begin(),arr.end());
        if(arr[2] >= arr[0] + arr[1]){
            cout << arr[0] + arr[1] <<'\n';
            continue;
        }
        int differ = arr[2] - arr[1];
        int sum = differ;
        arr[2] -= differ;
        arr[0] -= differ;
        sum += arr[0] / 2 + arr[1];
        cout << sum <<'\n';
    }
    return 0;
}
View Code

B. PIN Codes

#include
#define rep(i, n) for(int i=0;i!=n;++i)
#define per(i, n) for(int i=n-1;i>=0;--i)
#define Rep(i, sta, n) for(int i=sta;i!=n;++i)
#define rep1(i, n) for(int i=1;i<=n;++i)
#define per1(i, n) for(int i=n;i>=1;--i)
#define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
#define L k<<1
#define R k<<1|1
#define inf (0x3f3f3f3f)
#define llinf (1e18)
#define mid (tree[k].l+tree[k].r)>>1
#define ALL(A) A.begin(),A.end()
#define SIZE(A) ((int)A.size())
#define PII pair
typedef long long i64;
using namespace std;
int main() {
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int t,n;  cin >> t;
    while(t--){
        cin >> n;
        map<string,int> mp;
        vector<int> arr(11,0);
        vector<string> vs;
        string str;
        int index = 0;
        while(n--){
            cin >> str;
            vs.push_back(str);
            if(!mp.count(str))
                mp[str] = ++index;//hash
            ++arr[mp[str]];
        }
        int sum = accumulate(arr.begin(),arr.end(),0) - index;
        cout << sum <<'\n';
        set<string> s;
        for(auto it=mp.begin();it!=mp.end();++it)
            s.insert(it->first);
        for(auto v:vs){
            string tmp = v;
            if(arr[mp[v]] > 1){
                for(int i=0;i!=10;++i){
                    v[0] = '0' + i;
                    if(!s.count(v)){
                        s.insert(v);
                        cout << v <<'\n';
                        --arr[mp[tmp]];
                        break;
                    }
                }
            }
            else
                cout << v <<'\n';
        }
    }    
    return 0;
}
View Code

C. Everyone is a Winner!

#include
#define rep(i, n) for(int i=0;i!=n;++i)
#define per(i, n) for(int i=n-1;i>=0;--i)
#define Rep(i, sta, n) for(int i=sta;i!=n;++i)
#define rep1(i, n) for(int i=1;i<=n;++i)
#define per1(i, n) for(int i=n;i>=1;--i)
#define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
#define L k<<1
#define R k<<1|1
#define inf (0x3f3f3f3f)
#define llinf (1e18)
#define mid (tree[k].l+tree[k].r)>>1
#define ALL(A) A.begin(),A.end()
#define SIZE(A) ((int)A.size())
#define PII pair
typedef long long i64;
using namespace std;
int main() {
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int t,n;  cin >> t;
    while(t--){
        cin >> n;
        set<int> s;
        s.insert(0);
        for(int i=1;i<=sqrt(n);++i){
            s.insert(n/i);
            s.insert(i);
        }
        cout << s.size() <<'\n';
        for(auto v: s)
            cout << v <<" ";
        cout << '\n'; 
    }
    return 0;
}
View Code

D. Secret Passwords

#include
#define rep(i, n) for(int i=0;i!=n;++i)
#define per(i, n) for(int i=n-1;i>=0;--i)
#define Rep(i, sta, n) for(int i=sta;i!=n;++i)
#define rep1(i, n) for(int i=1;i<=n;++i)
#define per1(i, n) for(int i=n;i>=1;--i)
#define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
#define L k<<1
#define R k<<1|1
#define inf (0x3f3f3f3f)
#define llinf (1e18)
#define mid (tree[k].l+tree[k].r)>>1
#define ALL(A) A.begin(),A.end()
#define SIZE(A) ((int)A.size())
#define PII pair
typedef long long i64;
using namespace std;
vector<int> pa(26);
int find(int cur){
    if(pa[cur] != cur)
        pa[cur] = find(pa[cur]);
    return pa[cur];
}
int main() {
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    vector<bool> arr(26,false);
    vector<string> vs;
    rep(i,26)
        pa[i] = i;
    int n;  cin >> n;
    string str;
    while(n--){
        cin >> str;
        sort(str.begin(),str.end());
        str.erase(unique(ALL(str)),str.end());
        vs.push_back(str);
        for(int i=0;i!=SIZE(str);++i)
            arr[str[i] - 'a'] = true;
    }
    for(auto s: vs){
        int u = s[0] - 'a';
        for(int i = 1;i!=SIZE(s);++i){
            int pA = find(u);
            int pB = find(s[i] - 'a');
            pa[pA] = pB; 
        }
    }
    int sum = 0;
    for(int i=0;i!=26;++i){
        if(find(i) == i && arr[i])
            ++sum;
    }
    cout << sum <<'\n';
    return 0;
}
View Code

E. Editor

题解:假设 ( 值为1,)值为-1,因为要满足匹配,所以总和一定为0,可以用线段树解决,如果出现前缀和小于0的情况,一定是不满足的,在满足的情况下求最大嵌套层数就是求最大前缀和

#include
#define rep(i, n) for(int i=0;i!=n;++i)
#define per(i, n) for(int i=n-1;i>=0;--i)
#define Rep(i, sta, n) for(int i=sta;i!=n;++i)
#define rep1(i, n) for(int i=1;i<=n;++i)
#define per1(i, n) for(int i=n;i>=1;--i)
#define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
#define L rt<<1
#define R rt<<1|1
#define inf (0x3f3f3f3f)
#define llinf (1e18)
#define ALL(A) A.begin(),A.end()
#define SIZE(A) ((int)A.size())
#define PII pair
typedef long long i64;
using namespace std;
const int maxn = 1e6 + 32;
int sum[maxn<<2],ma[maxn<<2],mi[maxn<<2];
void update(int rt,int l,int r,int pos,int value){
    if(l == r){
        sum[rt] = ma[rt] = mi[rt] = value;
        return; 
    }
    int mid = (l + r) >> 1;
    if(pos <= mid)
        update(L,l,mid,pos,value);
    else
        update(R,mid+1,r,pos,value);
    sum[rt] = sum[L] + sum[R];
    ma[rt] = max(ma[L],sum[L]+ma[R]);
    mi[rt] = min(mi[L],sum[L]+mi[R]);
}
int main() {
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int n,index = 1;  cin >> n;
    string cmd; cin >> cmd;
    for(auto c: cmd){
        if(c == '(')    update(1,1,n,index,1);
        else if(c == 'L')   {if(index > 1)   --index;}
        else if(c == 'R')   ++index;
        else if(c == ')')   update(1,1,n,index,-1);
        else    update(1,1,n,index,0);
        if(sum[1]==0&&mi[1]>=0)
            cout << ma[1] <<" ";
        else
            cout << -1 <<" ";
    }
    cout << '\n';
    return 0;
}
View Code

F. Economic Difficulties

你可能感兴趣的:(codeforces603)