头像

BLACKKNIGHT




在线 


最近来访(2)
用户头像
封禁用户
用户头像
Acw_9

活动打卡代码 AcWing 790. 数的三次方根

BLACKKNIGHT
4小时前
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    double n;
    cin>>n;
    double l=-10000, r=10000;
    while(r-l>1e-8)
    {
        double mid=(l+r)/2;
        if(mid*mid*mid>=n) r=mid;
        else l=mid;
    }
    cout<<fixed<<setprecision(6)<<l<<endl;
    return 0;
}


活动打卡代码 AcWing 789. 数的范围

BLACKKNIGHT
4小时前
#include<iostream>
using namespace std;
const int N=100010;
int a[N];
int main()
{
    int n,q;
    cin>>n>>q;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    while(q--)
    {
        int k;
        cin>>k;

        int l=0, r=n-1;
        while(l<r)
        {
            int mid=l+r>>1;
            if(a[mid]>=k) r=mid;
            else l=mid+1;
        }
        if(a[l]==k)
        {
            cout<<l<<' ';

            int r=n-1;
            while(l<r)
            {
                int mid=l+r+1>>1;
                if(a[mid]<=k) l=mid;
                else r=mid-1;
            }
            cout<<l<<endl;
        }
        else
        {
            cout<<"-1"<<' '<<"-1"<<endl;
        }
    }
    return 0;
}


活动打卡代码 AcWing 1875. 贝茜的报复

BLACKKNIGHT
22小时前
#include<iostream>
using namespace std;

int ans;
map<char, int> mp1, mp2, a;
string s = "BESIGOM";//字母顺序无所谓,全部表示出来就行
void dfs(int u, int x){
    if(u == 7){
        if((a['B'] + a['I']) % 2 && (a['G'] + a['O'] + a['E'] + a['S']) % 2 && a['M'] % 2) return;
        ans += x;
        return;
    }
    char ch = s[u];
    a[ch] = 1, dfs(u + 1, x * mp1[ch]);//枚举ch为奇数的情况
    a[ch] = 2, dfs(u + 1, x * mp2[ch]);//枚举ch为偶数的情况
}
int main(){
    int n; cin >> n;
    for(int i = 0; i < n; i++){
        char c; int x; cin >> c >> x;
        if(x % 2) mp1[c]++;//字母C中奇数的个数
        else mp2[c]++;//字母C中偶数的个数
    }
    dfs(0, 1);
    cout << ans;
    return 0;
}



活动打卡代码 AcWing 116. 飞行员兄弟

BLACKKNIGHT
22小时前
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;

const int N=5;
char g[N][N],backup[N][N];//定义两个字符型数组,一个用来存开关,一个用来备份

typedef pair<int,int> PII;//用来记录输出的坐标

//2.将二维坐标转换为一维坐标
int get(int i,int j)
{
    return 4*i+j;
}

void turn_one(int x,int y)
{
    if(g[x][y]=='+') g[x][y]='-';
    else g[x][y]='+';
}

//(x,y)所在的一行一列开关都需要变换
void turn_all(int x, int y)
{
    for(int i=0;i<4;i++)
    {
        turn_one(x,i);
        turn_one(i,y);
    }
    turn_one(x,y);
}

int main()
{
    for(int i=0;i<4;i++) cin>>g[i];//读入开关状态

    vector<PII> res;//用来记录最终坐标答案
    //枚举所有开关的可能
    for(int op=0;op<1<<16;op++)//1<<16相当于2^16
    {
        vector<PII> temp;//记录每种情况的临时答案
        memcpy(backup,g,sizeof g);

        for(int i=0;i<4;i++)
        {
            for(int j=0;j<4;j++)
            {
                if(op>>get(i,j)&1)//2  将二维坐标转换为一维坐标方便位运算
                {
                    temp.push_back({i,j});//如果当前状态为关闭,那么进行操作,并把开关坐标存下 
                    turn_all(i,j);//3  对灯进行操作
                }
            }
        }

        bool dark=false;
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<4;j++)
            {
                if(g[i][j]=='+')
                {
                    dark=true;//有关闭的,冰箱不会打开
                    break;
                }
            }
        }

        if(!dark)//如果冰箱能打开,即满足条件
        {
            if(res.empty()||res.size()>temp.size()) res=temp;//记录最小值的操作情况
        }
        memcpy(g,backup,sizeof backup);
    }


    cout<<res.size()<<endl;
    for(int i=0;i<res.size();i++)
    {
        cout<<res[i].first+1<<' '<<res[i].second+1<<endl;//因为坐标是从0行开始记的,所以需要都加1
    }
    return 0;
}


活动打卡代码 AcWing 1208. 翻硬币

BLACKKNIGHT
23小时前
#include<iostream>
#include<cstring>
using namespace std;

const int N=110;
string a,b;
void turn(int x)
{
    if(a[x]=='*') a[x]='o';
    else a[x]='*';
}

int main()
{
    cin>>a>>b;
    int step=0;
    for(int i=0;i<a.size();i++)
    {
        if(a[i]!=b[i])
        {
            step++;
            turn(i);
            turn(i+1);
        }
    }
    cout<<step;
    return 0;
}



活动打卡代码 AcWing 95. 费解的开关

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;

const int N = 6;
char g[N][N], backup[N][N];

int dx[5]={-1,1,0,0,0};
int dy[5]={0,0,-1,1,0};
void turn(int x,int y)
{
    for(int i=0;i<5;i++)
    {
        int a=x+dx[i],b=y+dy[i];//遍历周围的位置
        if(a<0||a>=5||b<0||b>=5) continue;//在边界外可直接忽略
        g[a][b]^=1;//改变开关状态
    }
}

int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        for(int i=0;i<5;i++)
        {
            cin>>g[i];
        }
        int res = 10;//记录结果,先设一个较大的值
        //枚举第一行的操作
        for(int op=0;op<32;op++)//2^5共32种开关组合
        {
            memcpy(backup,g,sizeof g);
            int step=0;//记录步数
            for(int i=0;i<5;i++)//i等于0相当于不右移
            {
                if(op>>i&1)
                {
                    step++;
                    turn(0,i);
                }
            }


            for(int i=0;i<4;i++)//找出前四行暗的地方,在下一行操作使其变亮
            {
                for(int j=0;j<5;j++)//每一列
                {
                    if(g[i][j]=='0')
                    {
                        step++;
                        turn(i+1,j);
                    }
                }
            }

            bool dark=false;
            //判断最后一行是否还有灭的灯
            for(int i=0;i<5;i++)
            {
                if(g[4][i]=='0')
                {
                    dark=true;
                    break;
                }
            }
            if(!dark) res=min(res,step);
            memcpy(g,backup,sizeof backup);

        }
        if(res>6) res=-1;
        cout<<res<<endl;

    }
    return 0;
}


活动打卡代码 AcWing 717. 简单斐波那契

#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a=0, b=1;
    for(int i=0;i<n;i++)
    {
        cout<<a<<' ';
        int c=a+b;
        a=b;
        b=c;
    }
    return 0;
}


新鲜事 原文

点击学生认证,移到最下方,填写邀请码可以再得1AC币,买课可抵11RMB。 https://www.acwing.com/user/security/school_verify/ac_stars/ 我的邀请码是:KLBEE


活动打卡代码 AcWing 1209. 带分数

#include<iostream>
using namespace std;
const int N=10;
bool st[N];//记录当前数字是否被选中
int res[N];//记录排列数组
int ans;//记录答案
int n;


//将枚举的单个数字转为整数
int to_num(int l,int r)//[l,r]为数组res一部分
{
    int m = 0;
    for(int k=l;k<=r;k++)
    {
        m=m*10+res[k];
    }
    return m;
}

void dfs(int u)
{
    if(u>9)
    {
        //n=a+b/c;
        for(int i=1;i<=7;i++)//枚举a占的位
        {
            for(int j=i+1;j<=8;j++)//枚举b占的位
            {
                int a=to_num(1,i);
                int b=to_num(i+1,j);
                int c=to_num(j+1,9);
                if((b%c==0)&&(a*c+b==n*c)) 
                    ans++;
            }
        }
        return;
    }

    //递归
    for(int i=1;i<=9;i++)
    {
        if(!st[i])
        {
            res[u]=i;
            st[i]=true;
            dfs(u+1);

            res[u]=0;
            st[i]=false;
        }
    }
}

int main()
{
    cin>>n;

    dfs(1);
    cout<<ans;
    return 0;
}



#include<iostream>
using namespace std;

const int N = 18;
int n,m;
int st[N];

void dfs(int u,int start)
{
    if(u+n-start<m) return;//剪枝
    if(u==m+1)
    {
        for(int i=1;i<=m;i++)
        {
            cout<<st[i]<<' ';
        }
        cout<<endl;
        return;
    }

    for(int i=start;i<=n;i++)
    {
        st[u]=i;
        dfs(u+1,i+1);

        //恢复现场
        st[u]=0;
    }
}

int main()
{
    cin>>n>>m;

    dfs(1,1);
    return 0;
}