头像
先wa一发再说
发布于 2023-10-28 23:12
+ 关注

题解

A 签到

#include "stdio.h"
int main()
{
    printf("zhe\n");
    printf("shi\n");
    printf("yi\n");
    printf("dao\n");
    printf("qian\n");
    printf("dao\n");
    printf("ti\n");
    return 0;
}

B 签到2

alt

#include "stdio.h"
#include"math.h"
int main()
{
    int x1,y1,r1,x2,y2,r2;
    float P;
    int T;
    scanf("%d",&T);
    while(T--)
    {
    	scanf("%d%d%d%d%d%d",&x1,&y1,&r1,&x2,&y2,&r2);
    	P=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
    	if(abs(r1-r2)<=P&&P<=r1+r2)//
    	printf("YES\n");
    	else
    	printf("NO\n");
    	}

    return 0;
}

c

多举几个例子就能推出来 答案只与x二进制数有几个1和x是否为奇数有关。

  • 奇数个1且x为奇的公式是2*1的个数-1 例如19的二进制=10011=5
  • 奇数个1且x为奇的公式是2*1的个数+1
  • 偶数运行一次便华为了奇数形式
#include"bits/stdc++.h"
using namespace std;
void slove(){
    ll x;
    scanf("%ld",&x);
    ll ans=0;
    for(int i=0;i<=100;i++){
        if(x<(1<<i))break;
        if(x&(1<<i)){
            ans++;
        }
    }
    if(ans%2){
        printf("%ld\n",2*ans+1-((x&1)?2:0));
    }
    else {
        //cout<<2*(ans-1)+2-((x&1)?2:0)<<endl;
        printf("%ld\n",2*(ans-1)+2-((x&1)?2:0));
    }
}

int main(){
    //js;
    int t=1;
    scanf("%d",&t);
    while(t--)slove();
}

D

考点:思维+进制转换

思路:因为k次方要么不用,要么只能用一次,那么就将每个数都转换为k进制,并且每一位只能用一次,超过一次的就输出no

这题出的太酷了!!! 代码部分:

int cnt[109];
void slove() {
    int n, k;
    cin >> n >> k;
    ll x;
    int f = 0;
    memset(cnt, 0, sizeof cnt);
    for(int i=1;i<=n;i++){
        cin >> x;
        int p = 0;
        while (x > 0&&f==0) {
            int y = x % k;
            x = x / k;
            if (y > 1) { f = 1; break; }//只能用一次,y不能大于1
            if (y && cnt[p]) {//已经用过一次了,不能再用了。
                f = 1;
                break;
            }
            if (y && cnt[p]) {
                f = 1;
                break;
            }
            if (y)cnt[p] = 2;
            p++;
        }
    }
    if (f) {
        cout << "NO" << endl;
    }
    else {
        cout << "YES" << endl;
    }
}

int main() {
    js;
    int t = 1;
    cin>>t;
    while (t--)slove();
}

E

数组

#include <stdio.h>
int main()
{
        int n,m,k;
        scanf("%d %d %d",&n,&k,&m);
        int a[100];
        int i,temp;
        int count=0;
        temp=n;
        for(i=0;i<n;i++)
        {
          a[i]=i;//记录位置
        }
        
        while(n>1)
        {
             if(a[k]!=-1)   
             {
                 count++;报数
             }
             if(count==m)
             {
                    a[k]=-1;//出列  
                    count=0;
                    n--;  
             }
             k++;
             if(k==temp)
             {
                    k=0;
             }
        }
        for(i=0;i<temp;i++)
        {
                if(a[i]!=-1)  
                {
                        printf("%d",a[i]);
                }
        }
        return 0;
}

f

模拟

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
int x,y,k;
int main(void)
{
    int T;
    cin>>T;
    while(T--)
    {
        int n,a,b,d;
        int ans=(int)1e9;
        cin>>n>>a>>b;
        for(int i=1;i<=n;i++)
        {
            cin>>d>>x>>y;
            //cout<<"d: "<<d<<" x: "<<x<<" y: "<<y<<endl;
            for(int j=1;j<=d;j++)
            {
                cin>>k;
                int num=k;
                //cout<<"k: "<<k<<" ";
                if(num>=x)//大于商家卷--
                    k-=y;
                if(num>=a)//大于自己的卷--
                    k-=b;
                //cout<<" after: "<<k<<endl;
                ans=min(ans,k);//更新答案
                ans=max(0,ans);//保证不为0,商家已经免费请你吃了,总不能还给钱给你吧QAQ
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

全部评论

(2) 回帖
加载中...
话题 回帖

本文相关内容

等你来战

查看全部

热门推荐