Educational Codeforces Round 90(Rated for Div.2)題解

4903 ワード

A. Donut Shops
  • タイトルトランスポートドア
  • 水題は、a*bとcで大きさを比べておけばいいのですが、1種類目のビスケットを買うのが安いと要求された場合は、1枚だけ買って、aとcの大きさを比較して、2種類目の安いものを買うのがa*bとcの大きさを比較すればいいと仮定します.
    #include
    using namespace std;
    #pragma GCC optimize(2)
    typedef long long ll;
    typedef unsigned long long ull;
    typedef long double ld;
    ll t,a,b,c;
     
     
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>t;
        while(t--){
            cin>>a>>b>>c;
            ll a1=0,a2=0;
            if(c>a){
                cout<c){
                cout<

    B. 01 Game
  • タイトルトランスポートドア
  • 以前に似たようなことをしたことがあるが、結局自分でwaを誤解され、複雑に考えたが、実は0と1の個数を記録してから、小さい人が2で除去されるかどうかを見ればいい.emmmmは、1と0の数が少ない人がいつも消えてしまうことを証明することができる.
  • #include
    using namespace std;
    #pragma GCC optimize(2)
    typedef long long ll;
    typedef unsigned long long ull;
    typedef long double ld;
    int t;
    string s;
     
     
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>t;
        while(t--){
            cin>>s;
            int ans=0;
            int a0=0,a1=0;
            for(int i=0;i

    C. Pluses and Minuses
  • タイトルトランスポートドア
  • これは実は簡単にcur=0を始めて、各記号のcurを1回歩いて、例えば
  •   --+-
    
  • 対応-1-2-1-2対応がcur配列(コードではr配列)であれば-1から歩き、ans=0をマークし、cur[i]よりも小さいものに遭遇した場合、ansにはこのcurの下付きを付ける.最後に配列全体の長さ
  • を追加する
  • この問題はlong long会爆intをつけないで、wa on test 7、私はwaを1発しました(カラーペンは涙を流します
  • #include
    using namespace std;
    #pragma GCC optimize(2)
    typedef long long ll;
    typedef unsigned long long ull;
    typedef long double ld;
    ll t;
    string s;
    const int inf = 0x3f3f3f3f;
    const int maxn = 1e6 + 10;
    ll r[maxn];
     
    int main()
    {
        ios::sync_with_stdio(false);
        cin >> t;
        while (t--) {
            cin >> s;
            //int rec=0;
            //int a=0,r=0;
            if (s[0] == '+') r[0] = 1;
            else r[0] = -1;
            ll len = s.size();
            for (ll i = 1; i < s.size(); ++i) {
                r[i] = s[i] == '+' ? r[i - 1] + 1 : r[i - 1] - 1;
            }
            //r[len] = -0x3f3f3f3f;
            ll rec = 0;
            ll ans = 0;
            for (ll i = 0; i <= len; ++i) {
                if (i == len) {
                    ans += len;
                    break;
                }
                if (r[i] < rec) {
                    rec = r[i];
                    ans += i + 1;
                }
            }
            cout << ans << "
    "; } return 0; }

    D. Maximum Sum on Even Positions
  • タイトルトランスポートドア
  • という問題の試合の時にうそをついたので、最后にやはり见たdalaoの(pxy,yyyds!)を降りてから、実はよく考えてみると、この问题は以前やったことがある问题で、ただここでパリティを分けて考えただけで、私は本当に料理が多すぎて、この问题は実は偶数の长さの子列が反転してこそ有効で、奇数の长さの反転は结果に影响しないことを発见して、それから简単に考えてみるとあります(私は本当に料理が多すぎて、涙を流しました.
    #include
    using namespace std;
    const int maxn = 2e5 + 10;
    typedef long long ll;
    ll t, n, a[maxn], r1[maxn], r2[maxn];
     
    int main()
    {
        ios::sync_with_stdio(false);
        cin >> t;
        while (t--) {
            cin >> n;
            for (int i = 0; i < n; ++i) cin >> a[i];
            int f = 1;
            for (int i = 0; i < n - 1; i += 2) {
                r1[f] = a[i + 1] - a[i];
                f++;
            }
            int f1 = 1;
            for (int i = 2; i < n; i += 2) {
                r2[f1] = a[i - 1] - a[i];
                f1++;
            }
            ll sum = 0;
            for (int i = 0; i < n; i += 2) sum += a[i];
            ll tmp = 0, now = 0;
            for (int i = 0; i < f; ++i) {
                now += r1[i];
                if (now <= 0) now = 0;
                tmp = max(tmp, now);
            }
            ll tmp1 = 0; now = 0;
            for (int i = 0; i < f1; ++i) {
                now += r2[i];
                if (now <= 0) now = 0;
                tmp1 = max(tmp1, now);
            }
            sum = max(sum + tmp1, sum + tmp);
            cout << sum << "
    "; } return 0; }

    ついでにオヤジのコードもパ(pxy,yyyds!
    #include
    using namespace std;
    typedef long long ll;
    int s[200010],d[200010];
     
    long long MaxSubseqSum4( int A[], int N ) {
        long long ThisSum, MaxSum, i;
        
        ThisSum = MaxSum = 0;
        for( i = 1; i < N; i+=2 ) {
                ThisSum += (A[i]);
                if( ThisSum > MaxSum ){
                    MaxSum = ThisSum;
                }
                else if( ThisSum < 0 ) 
                    ThisSum = 0;
        }
        ThisSum=0;
        for( i = 2; i < N; i+=2 ) {
            ThisSum -= (A[i]);
            if( ThisSum > MaxSum )
                MaxSum = ThisSum;
            else if( ThisSum < 0 )
                ThisSum = 0;
        }
        return MaxSum;  
    }
     
    int main(){
        int a,b,c,t,x,y;
        long long rzt,xxt,max;
        scanf("%d",&t);
        while(t--){
            scanf("%d",&a);
            rzt=0;
            for(int l1=0;l1
  • 太菜了私、自分の料理に泣かれて、料理は眠れないまで、だから起きてついでに前の4題の問題解を書いて、efは明日目が覚めて
  • を補います