Codeforces Round 613(div2) 解题报告

2020.1.12 星期六
昨天上经济课真是刺激,本来没打算打这场div2的,后来看到群里好多人都去了,心里痒痒,正好在路上有了第一题的思路,就交上去了,全然不顾我已经比别人晚了45分钟以及我马上要去上economic of risk的事实,试试就逝世。

上课我习惯性地坐在了第一排,结果忘了我今天还有别的任务,结果电脑打开就开始做题了,后面的三位中国同学很好奇经济课上为什么会有计科学生乱入,纷纷投来好奇的目光,第一排坐着个在看电脑的人,然后后一排人全在看第一排的人,这想都不用想绝对是走神了,当场被老师拉出来制裁了,结果我才交完第一题就被缴了械。。。哭了,掉分预定,绿名也能掉分属实厉害。

然后说比赛吧,感觉真的不难,这几个都是构思特别精巧的题,a和c基本都是秒出,然而b卡住了,后来还是因为国内老姐给我的思路,最后ac了,然后最后一题d,再往下就是不可做题了,这道题分治的优势很明显(虽然我逆序数都能写挂好几次没资格说这个话),但是具体怎么做我也是后来从别人那里得到的启发,毕竟对位运算还不算太老练,答题思路是对每一位进行分治,查在这个位置上0和1的情况,就是这个位置上如果既有0,也有1,那么完蛋了,这个位置上的1八成是跑不掉了,如果只有0或者只有1那么就可以把这一位对应地设置成0或1来取到0,感觉不难,但是写起来真的有一定的难度,后来还是A了。
下面是A. Mezo Playing Zoma 的AC代码

#include <bits/stdc++.h>
using namespace std;
#define limit 200000 + 5//防止溢出
#define INF 0x3f3f3f3f
#define inf 0x3f3f3f3f3ff
#define lowbit(i) i&(-i)//一步两步
#define EPS 1e-6
#define Modulo 1000000
#define ff(a) printf("%d\n",a );
#define MOD 1e9 + 7
typedef unsigned long long ll;
void read(int &x){
    char ch = getchar();x = 0;
    for (; ch < '0' || ch > '9'; ch = getchar());
    for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
}//快读
int read(){
    int x;
    char ch = getchar();x = 0;
    for (; ch < '0' || ch > '9'; ch = getchar());
    for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
    return x;
}//快读
int n;
int main(){
    //freopen("C:\\Users\\administrator01\\CLionProjects\\untitled14\\data.txt", "rt", stdin);
    string str;
    cin>>n>>str;
    cout<<(str.length() + 1)<<endl;
}

B. Just eat it 的AC代码

#include <bits/stdc++.h>
using namespace std;
#define limit 200000 + 5//防止溢出
#define INF 0x3f3f3f3f
#define inf 0x3f3f3f3f3ff
#define lowbit(i) i&(-i)//一步两步
#define EPS 1e-6
#define Modulo 1000000
#define ff(a) printf("%d\n",a );
#define MOD 1e9 + 7
typedef long long ll;
void read(int &x){
    char ch = getchar();x = 0;
    for (; ch < '0' || ch > '9'; ch = getchar());
    for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
}//快读
int read(){
    int x;
    char ch = getchar();x = 0;
    for (; ch < '0' || ch > '9'; ch = getchar());
    for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
    return x;
}//快读
int n;
int kase;
ll a[limit];
int main(){
    //freopen("C:\\Users\\administrator01\\CLionProjects\\untitled14\\data.txt", "rt", stdin);
    kase = read();
    while(kase--){
        n = read();
 
        for(int i = 1 ; i <= n ; ++i){
            cin>>a[i];
        }
        ll sum1 = 0, sum2 = 0;
        int flag = 1;
        for(int i = 1 ; i <= n ; ++i){
            sum1 += a[i];
            if(sum1 <= 0){
                flag = 0;
                break;
            }
        }
        for(int i = n ; i >= 1 ; --i){
            sum2 += a[i];
            if(sum2 <= 0){
                flag = 0;
                break;
            }
        }
        puts(flag ? "YES" : "NO");
    }
}

C. Fadi and LCM 的AC代码(记得开ull)

#include <bits/stdc++.h>
using namespace std;
#define limit 200000 + 5//防止溢出
#define INF 0x3f3f3f3f
#define inf 0x3f3f3f3f3ff
#define lowbit(i) i&(-i)//一步两步
#define EPS 1e-6
#define Modulo 1000000
#define ff(a) printf("%d\n",a );
#define MOD 1e9 + 7
typedef unsigned long long ll;
void read(int &x){
    char ch = getchar();x = 0;
    for (; ch < '0' || ch > '9'; ch = getchar());
    for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
}//快读
int read(){
    int x;
    char ch = getchar();x = 0;
    for (; ch < '0' || ch > '9'; ch = getchar());
    for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
    return x;
}//快读
ll n;
int kase;
ll a[limit];
int cnt = 0;
int main(){
    //freopen("C:\\Users\\administrator01\\CLionProjects\\untitled14\\data.txt", "rt", stdin);
    cin>>n;
    for(ll i = 1 ; i * i <= n; ++i){
        //枚举所有的divisor
        if(n % i == 0){
            a[++cnt] = i;//记录所有的divisor
        }
    }
    ll ans1 = inf, ans2 = inf;
    for(int i = 1 ; i <= cnt ; ++i){
        if(gcd(a[i] , n / a[i]) == 1){
            //如果这两个互质
            if(max(ans1, ans2) > max(a[i] , n / a[i])){
                ans1 = a[i];
                ans2 = n / a[i];
            }
        }
    }
    printf("%lld %lld\n", ans1, ans2);
}

D. Dr. Evil Underscores的AC代码,不要问我你是不是抄答案了,我这几天的代码和标准答案真的很像,但不一样

#include <bits/stdc++.h>
using namespace std;
#define limit 100000 + 5//防止溢出
#define INF 0x3f3f3f3f
#define inf 0x3f3f3f3f3ff
#define lowbit(i) i&(-i)//一步两步
#define EPS 1e-6
#define Modulo 1000000
#define ff(a) printf("%d\n",a );
#define MOD 1e9 + 7
#define FOPEN freopen("C:\\Users\\administrator01\\CLionProjects\\untitled14\\data.txt", "rt", stdin)
typedef unsigned long long ll;
void read(int &x){
    char ch = getchar();x = 0;
    for (; ch < '0' || ch > '9'; ch = getchar());
    for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
}//快读
int read(){
    int x;
    char ch = getchar();x = 0;
    for (; ch < '0' || ch > '9'; ch = getchar());
    for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
    return x;
}//快读
int n;
vector<int>v;
int dfs(int cur, vector<int>&vect){
    if(cur < 0){
        return 0;
    }
    vector<int>zero, one;//当前位置上两个数字的开合情况
    for(auto i : vect){
        if((i >> cur) & 1){
            //如果当前位置上有1
            one.push_back(i);
        }else{
            zero.push_back(i);
        }
    }
    if(one.empty()){
        return dfs(cur - 1, zero);
    }else if(zero.empty()){
        return dfs(cur - 1, one);
    }
    return min(dfs(cur - 1, zero) , dfs(cur - 1, one)) + (1 << cur);//记录本单位
}
int main(){
    //FOPEN;
    n = read();
    for(int i = 1 ; i <= n ; ++i){
        int a = read();
        v.push_back(a);
    }
    int ans = dfs(30 , v);
    printf("%d\n", ans);
}
发布了69 篇原创文章 · 获赞 0 · 访问量 2854

猜你喜欢

转载自blog.csdn.net/Stagflation/article/details/103942816