2021暑假集训-个人赛9


A.Dislike of Threes

传送门
思路:这就是个水题,跑一遍就行,把能被3整除和最后一位是3的判断一下就行

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<stack>
#include <limits>
#include<string>
#include<deque>
#include<map>
#include<bitset>
#include<set>
#include<cstdio>
#include<vector>
#define ll long long
#define PI 3.141592653589793
#define E 2.718281828459045
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define FO( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define lowbit(a) ((a)&-(a))
typedef unsigned long long ull;
const ll mod=10007;
const ll INF=0x3f3f3f3f;
const ll Max=10000;
using namespace std;
int t,n,m;
int a[1010];
/*queue<ll> q;
stack<ll> s;
//升序队列
priority_queue <int,vector<int>,greater<int> > q;
//降序队列
priority_queue <int,vector<int>,less<int> >q;*/
int main()
{
    scanf("%d",&t);
    int k=1;
    for(int i=1;k<1001;i++)
        if(i%3!=0&&i%10!=3)
        a[k++]=i;
    while(t--)
    {
        cin>>n;
        cout<<a[n]<<endl;
    }
    return 0;
}

B.Who’s Opposite?

传送门
题目大意:有T个数据,输入a,b,c,已知两个的数a,b是相对的,若能构成环(是按顺序排的),则输出c相对的数,不能构成则输出-1
思路:相对的差的绝对值(n)的二倍就是能构成的,环的长度,则a,b,c都不能大于环的长度,如果c>n(环的一半),则它相对的是c-n,c=<n则是c+n
在这里插入图片描述

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<stack>
#include <limits>
#include<string>
#include<deque>
#include<map>
#include<bitset>
#include<set>
#include<cstdio>
#include<vector>
#define ll long long
#define PI 3.141592653589793
#define E 2.718281828459045
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define FO( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define lowbit(a) ((a)&-(a))
typedef unsigned long long ull;
const ll mod=10007;
const ll INF=0x3f3f3f3f;
const ll Max=10000;
using namespace std;
ll t,n,m;
/*queue<ll> q;
stack<ll> s;
//升序队列
priority_queue <int,vector<int>,greater<int> > q;
//降序队列
priority_queue <int,vector<int>,less<int> >q;*/
int main()
{
    scanf("%lld",&t);
    while(t--)
    {
        ll a,b,c;
        scanf("%lld%lld%lld",&a,&b,&c);
        n=abs(a-b);
        if(c>2*n||a>2*n||b>2*n)
            printf("-1\n");
        else {if(c>n)
        {
            printf("%lld\n",c-n);
        }else printf("%lld\n",c+n);
        }
    }
    return 0;
}

C.Infinity Table

传送门
题目大意:
在这里插入图片描述
思路:把数分成若干部分,每个部分是L(镜像一下)的部分,并且这个部分(除本身就是平方数)的开方是相同的,并且根据水平和竖着的拐角可以分为两部分,对这4部分进行特判就行,还有某些关系,直接看代码吧,挺好理解的,就是得细心,我就粗心,WA了两次,烦

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<stack>
#include <limits>
#include<string>
#include<deque>
#include<map>
#include<bitset>
#include<set>
#include<cstdio>
#include<vector>
#define ll long long
#define PI 3.141592653589793
#define E 2.718281828459045
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define FO( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define lowbit(a) ((a)&-(a))
typedef unsigned long long ull;
const ll mod=10007;
const ll INF=0x3f3f3f3f;
const ll Max=100000;
using namespace std;
ll t,n,m;
/*queue<ll> q;
stack<ll> s;
//升序队列
priority_queue <int,vector<int>,greater<int> > q;
//降序队列
priority_queue <int,vector<int>,less<int> >q;*/
int main()
{
    scanf("%lld",&t);
    while(t--)
    {  ll i;
        scanf("%lld",&n);
        ll s=sqrt(n);
        if(n==s*s)
            printf("%lld 1\n",s);
        else
        if(n==(s*s)+s+1)
                printf("%lld %lld\n",s+1,s+1);
       else if(n<(s*s)+s+1)
        {
        for( i=1;i<=s;i++)
        if(s*s+i==n)
        break;
        printf("%lld %lld\n",i,s+1);}
    else if(n>(s*s)+s+1){
          {for( i=1;i<s;i++)

        if((s+1)*(s+1)-i==n)
            break;

    }printf("%lld %lld\n",s+1,i+1);
    }


    }
    return 0;
}

D.Make a Power of Two *

传送门

E.Nearest Beautiful Number (easy version) *

传送门

F.Nearest Beautiful Number (hard version) *

传送门

G.Pipes *

传送门

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值