zoukankan      html  css  js  c++  java
  • Codeforces Round 504

    (交互题真神奇,,,我自己瞎写了一发目测样例都没过去就AC了。。。)

    (只出了两题的竟然没掉下蓝名真是可怕)

    A:我的代码太不美观了,放个同学的(因为我是c++63分的蒟蒻所以根本不知道那些函数怎么用只能手写被hack)

    这个题本身不难,坑点太多了,很囍的是我在2:13分的时候被hack了,,GG

      

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<climits>
    #include<vector>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<algorithm>
    using namespace std;
    int n,m;
    signed main() {
        cin>>n>>m;
        if (n > m + 1) return puts("NO"), 0;
        std::string s, t; 
        std::cin >> s >> t;
        int star = 0;
        for (auto i : s) if (i == '*') star = 1;
        if (!star && s != t) return puts("NO");
        std::string pre = s.substr(0, s.find('*')), suf = s.substr(s.find('*') + 1);
        int pres = pre.size(), sufs = suf.size();
        if (t.substr(0, pres) == pre && t.substr(m - sufs) == suf) puts("YES");
        else puts("NO");
    }

    B:自认非常优雅

      

     1 #include <bits/stdc++.h>
     2 typedef long long ll;
     3 using namespace std;
     4 ll n,k;
     5 int main(){
     6     scanf("%lld%lld",&n,&k);
     7     ll ans = 0;
     8     if(k>n){
     9         ll tmp = k-n;
    10         ans = (n-tmp+1)/2;
    11     } else{
    12         ll tmp = k-1;
    13         ans = (tmp-1+1)/2;
    14     }
    15     ans =ans>0?ans:0;
    16     printf("%lld
    ",ans);
    17 }

    C:

      太困了又刚补了几话狐妖又吸了冰毒 喝了冷藏的维他柠檬茶 导致一开始的思路是错的,,,还wa了两发。。。其实是个大水题

      

    #include <bits/stdc++.h>
    typedef long long ll;
    using namespace std;
    int n,k;
    char s[200005];
    int main() {
        scanf("%d%d", &n, &k);
        scanf("%s", s + 1);
        k/=2;
        int cnt = 0,cnt2=0;
        for(int i=1;i<=n;i++){
            if(s[i]=='(')
                cnt++;
            else
                cnt2++;
            printf("%c",s[i]);
            if(cnt==k)
                break;
        }
        cnt2 = cnt-cnt2;
        while (cnt2--){
            printf(")");
        }
    }
    View Code

    D:旁边哥们吐槽没读懂题,,其实我也没读懂,我是交了两发wa了之后才勉强猜对的题意,GG

      题意:我语文不好啊 

          给你n个数,q次操作,每次操作按照从1到q的顺序 对 任意区间赋值成 那个数,第一次赋值1,第二次赋值2, n个数中为0的数可以自由变成任意数,其他数不能改变, 问 q次操作后能否得到 给定 序列,并输出序列。 自己结合样例好好读读吧,,真的挺难懂的。。

      想了很多骚操作还是直接线段树好。。

      我觉着只要做了这个题代码是非常好懂的,我就不细说了

      

    #include <bits/stdc++.h>
    
    typedef long long ll;
    using namespace std;
    const int N = 2e5 + 5;
    int n, q;
    int a[N], vis[N],l[N],r[N],flag[N];
    int minn[4*N];
    
    void build(int k, int l, int r) {
        if (l == r) {
            minn[k] = a[l];
            return;
        }
        int mid = (l + r) >> 1;
        build(k << 1, l, mid);
        build(k << 1 | 1, mid + 1, r);
        minn[k] = min(minn[k*2],minn[k*2+1]);
    }
    
    void update(int k, int l, int r) {
    
    }
    
    int query(int k, int lef, int rig, int l, int r) {
        if (l <= lef && r >= rig)
            return minn[k];
        int mid = (lef + rig) / 2;
        int ans = 1e9;
        if (l <= mid)
            ans = min(ans, query(k * 2, lef, mid, l, r));
        if (r > mid)
            ans = min(ans, query(k << 1 | 1, mid + 1, rig, l, r));
        return ans;
    }
    
    int main() {
        scanf("%d%d", &n, &q);
        for (int i = 1; i <= n; i++)
            scanf("%d", &a[i]);
        for (int i = 1; i <= n; i++) {
            int j = i + 1;
            while (j <= n && (a[j] == a[i] || a[j] == 0)) {
                if (a[j] == 0) {
                    a[j] = a[i];
                    flag[j]=1;
                }
                j++;
            }
            vis[a[i]] = 1;
            i = j - 1;
        }
        int temp = 0;
        if(a[1]!=0&&!vis[q]){
            for(int i=1;i<=n;i++){
                if(flag[i]){
                    a[i]=q;
                    vis[q]=1;
                    break;
                }
            }
            if(!vis[q]) {
                printf("NO
    ");
                return 0;
            }
        }
        if (a[1] == 0) {
            if (!vis[q]) {
                temp = q;
            } else {
                for (int i = 1; i <= n; i++) {
                    if (a[i] != 0) {
                        temp = a[i];
                        break;
                    }
                }
            }
            for (int i = 1; i <= n; i++) {
                if (a[i] == 0)
                    a[i] = temp;
            }
        }
        for(int i=1;i<=n;i++){
            if(l[a[i]]==0)
                l[a[i]]=i;
            r[a[i]]=i;
        }
        build(1,1,n);
        for(int i=1;i<=q;i++){
            if(l[i]==0)
                continue;
            if(query(1,1,n,l[i],r[i])<i){
                printf("NO
    ");
                return 0;
            }
        }
        printf("YES
    ");
        for(int i=1;i<=n;i++){
            printf("%d ",a[i]);
        }
    }
    View Code

    E : 第一次做交互题,,瞎写一发入魂,,(当然不是昨晚上。。。)

      感觉就是个贪心啊,,我也不知道为啥我这么做就是对的

      

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    int n;
    
    bool ask(int n,int m,int x,int y){
        cout<<"? "<<n<<" "<<m<<" "<<x<<" "<<y<<endl;
        string s;
        cin>>s;
        return s[0]=='Y';
    }
    int main(){
        string ans1="";
        string ans2="";
        scanf("%d",&n);
        int i=1,j=1;
        int cnt =0;
        while (i<=n&&j<=n&&++cnt<=(n-1)){
            if(ask(i,j+1,n,n)){
                j++;
                ans1+="R";
            } else{
                i++;
                ans1+="D";
            }
        }
        i=n;j=n;cnt=0;
        while (i>=1&&j>=1&&++cnt<=n-1){
            if(ask(1,1,i-1,j)){
                i--;
                ans2+="D";
            } else{
                j--;
                ans2+="R";
            }
        }
        reverse(ans2.begin(),ans2.end());
        printf("! ");
        cout<<ans1<<ans2;
    }
    View Code

    讲道理这套题要是放到我状态很好的时候我真有可能5题。。。当然很好这种东西一般不存在。。

    我昨晚就出了BC两道题。。。惊了。。。

    有个可怜的计科老兄被查重误判skip了。。。我也是第一次听说这种操作。。。

    两题竟然还是蓝名,惊了。。。

    今中午要好好睡午觉!!!md4点睡的八点多就起来来实验室补题结果没开门。。。(笔记本被我折磨了5个多小时gg了,,没带电源回去)

    今晚edu可别再掉了,,,根据我的经验我现在已经达到极小点要开始反弹上紫了(雾

    扩了一波学长的好友现在有将近十个好友注册了很开森QwQ

      

  • 相关阅读:
    MinGW的下载和环境配置
    manacher算法
    利用jxl读取excel合并的单元格的一个小例子
    使用SQL*PLUS命令
    Oracle 11g学习笔记1
    关系数据模型
    JAVA IO学习总结
    Eclipse下的相对路径
    JAVA File的创建及相对路径绝对路径
    Java基本语法学习时需要注意的几点
  • 原文地址:https://www.cnblogs.com/MXang/p/9496653.html
Copyright © 2011-2022 走看看