Codeforces Round #238 (Div. 2)

来源:互联网 发布:js window.open 编辑:程序博客网 时间:2024/06/16 22:09

先贴代码,明早再说。

A题,一个sort排序就好了。

//Author£ºCY//School: CUST#include<iostream>#include<cstring>#include<algorithm>#include<cstdlib>#include<vector>#include<cmath>#include<stdlib.h>#include<iomanip>#include<list>#include<deque>#include<map>#include <stdio.h>#define PI 3.1415926535897#define maxn 150using namespace std;int main(){    int n,m;    int i,j,k;    int a[maxn];    cin>>n;    for(i=1;i<=n;i++){        scanf("%d",&a[i]);    }    sort(a+1,a+n+1);    for(i=1;i<n;i++){        cout<<a[i]<<" ";    }    cout<<a[n]<<endl;    return 0;}

B题 我写的好复杂,但是一时没有什么好思路,所以做出来的时候好慢:(

//Author£ºCY//School: CUST#include<iostream>#include<cstring>#include<algorithm>#include<cstdlib>#include<vector>#include<cmath>#include<stdlib.h>#include<iomanip>#include<list>#include<deque>#include<map>#include <stdio.h>#define PI 3.1415926535897#define maxn 3030using namespace std;struct node{    int times1;    int times2;    bool left;    bool right;}a[maxn];int main(){    int n;    string s;    cin>>n>>s;    int i,j,k;    int num=0;    for(i=0;i<=3030;i++){        a[i].left=false;        a[i].right=false;        a[i].times1=maxn;        a[i].times2=maxn;    }    for(i=0;i<n;i++){        if(s[i]=='.')continue;        if(s[i]=='L')        {            a[i].left=true;            a[i].right=false;            a[i].times1=0;            for(j=i-1;j>=0;j--){                if(s[j]=='R')break;                if(a[j].left&&(i-j+1)<a[j].times1||!a[j].left){                    a[j].times1=i-j;                    a[j].left=true;                }            }        }        if(s[i]=='R'){            a[i].right=true;            a[i].left=false;            a[i].times2=0;            for(j=i+1;j<n;j++){                if(s[j]=='L')break;                if(a[j].right&&(j-i+1)<a[j].times2||!a[j].right){                    a[j].times2=j-i;                    a[j].right=true;                }            }        }    }    for(i=0;i<n;i++)    {       // cout<<a[i].left<<" "<<a[i].right<<endl;        if(a[i].left==false&&a[i].right==false){           // cout<<i<<endl;            num++;        }        else if((a[i].left==true&&a[i].right==false)||(a[i].left==false&&a[i].right==true))            continue;        else if(a[i].left&&a[i].right){            if(a[i].times1==a[i].times2){              //  cout<<i<<endl;                num++;            }        }    }    cout<<num<<endl;    return 0;}

C:题,巨坑,我以为是个还有难度的题呢,结果好简单的,可惜超时了几次,没什么分数了。

方法就是,每次进行一次1,2操作就和1异或一下,3操作的时候直接输出就好了。


//Author£ºCY//School: CUST#include<iostream>#include<cstring>#include<algorithm>#include<cstdlib>#include<vector>#include<cmath>#include<stdlib.h>#include<iomanip>#include<list>#include<deque>#include<map>#include <stdio.h>#define maxn 1020#define PI 3.1415926535897using namespace std;int a[maxn][maxn];int n;int getnum(){    int i,j,k;//)    int sum=0;    for(i=1;i<=n;i++)        sum^=a[i][i];    sum%=2;    return sum;}int main(){    scanf("%d",&n);    int i,j,k;    for(i=1;i<=n;i++)        for(j=1;j<=n;j++)            scanf("%d",&a[i][j]);    int num;    scanf("%d",&num);     int cou=getnum();    while(num--){        int doip;        int x;        scanf("%d",&doip);        if(doip==3){             printf("%d",cou);        }        else {            scanf("%d",&x);            cou^=1;        }    }    cout<<endl;    return 0;}


0 0
原创粉丝点击