7.17训练

A - Time Limit

题目
在这里插入图片描述
这题巨水

#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 1e5 + 7;
const int M = 1e3+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
int a[N];
int main()
{
    int t;
    scanf("%d",&t);
    while (t--){
        int n;
        int x;
        scanf("%d",&n);
        rep(i,1,n)scanf("%d",&a[i]);
        x=3*a[1];
        rep(i,1,n){
            x=max(x,a[i]+1);
        }
        if(x&1)x++;
        printf("%d\n",x);
    }
    return 0;
}

B - Caesar Cipher

题目
在这里插入图片描述
加密是字母表右移或左移,显然这个时候字母表应该看成一个环,就在Z后面再来一遍字母表就行,然后就是查表得出答案。

#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 1e5 + 7;
const int M = 1e2+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
int a[N];
char s1[M],s2[M],ch[M];
char alp[M]="ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ";
int main()
{
    int t;
    int cnt=0;
    scanf("%d",&t);
    while (t--){
       int n,m;
       scanf("%d%d",&n,&m);
        scanf("%s%s",s1+1,s2+1);
        int x=s2[1]-s1[1];
        if(x<0)x+=26;
        scanf("%s",ch+1);
        rep(i,1,m){
            int y=ch[i]-'A';
            ch[i]=alp[y+26-x];
        }
        printf("Case #%d: %s\n",++cnt,ch+1);
    }
    return 0;
}

C - Fall Guys

题目

在这里插入图片描述
高中物理题?判断每个人到达时,皇冠的位置,然后计算取得它所额外需要的时间加上到达时间和延迟,然后排序即可。

#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 2e5 + 7;
const int M = 1e2+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
struct node
{
    int a,c;
    bool operator<(const node&t1)const{
        if(a!=t1.a)return a<t1.a;
        else return c<t1.c;
    }
}E[N];
int b[N],d[N];
int main()
{
    int t;
    int cnt=0;
    scanf("%d",&t);
    while (t--){
        int n,h,H;
        scanf("%d%d%d",&n,&h,&H);
        rep(i,1,n){
            scanf("%d",&b[i]);
            E[i].c=i;
            if(1&b[i]/H){
                int tt=b[i]%H;
                if(H-tt>h)E[i].a=H-tt-h+b[i];
                else E[i].a=b[i];
            }else{
                int tt=b[i]%H;
                if(tt>h)E[i].a=H-tt+H-h+b[i];
                else E[i].a=b[i];
            }
        }
        rep(i,1,n){
            scanf("%d",&d[i]);
            E[i].a+=d[i];
        }
        sort(E+1,E+1+n);
        printf("%d\n",E[1].c);
    }
    return 0;
}

D-Function

题目
在这里插入图片描述
先递归,发现与上次递归答案相同时退出递归,用乘法得出答案。

#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (ll i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 2e5 + 7;
const int M = 1e2+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
ll f(ll n)
{
    if(n==0)return 0;
    ll ans=1;
    ll p=n+1;
    ll x=n;
    ll temp=1;
    while (x){
        temp*=10;
        ans*=n%temp;
        ans%=p;
        x/=10;
    }
    return ans%p;
}
int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(NULL);
    int t;
    scanf("%d",&t);
    while (t--){
        ll n,m;
        scanf("%lld%lld",&n,&m);
        ll sum=0;
        ll temp=0;
        ll j=-1;
        rep(i,1,m){
            if(i==1)temp= f(n);
            else {
                if (temp == f(temp)) {
                    j = i;
                    break;
                }
            }
            sum+=temp;
            temp= f(temp);
        }
        if(j!=-1)
        sum+=(m-j+1)*temp;
        if(m==0)sum=0;
        printf("%lld\n",sum);
    }
    return 0;
}

E - PepperLa’s Cram School

题目
在这里插入图片描述
就看最小非0元素出现次数就行,刚开始我默认是1然后wa傻了。

#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (ll i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 1e3 + 7;
const int M = 1e5+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
int dis[N][N];
int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(NULL);
    int n;
    while (~scanf("%d",&n)){
        int sum=0;
        int mi=inf;
        rep(i,1,n){
            rep(j,1,n){
                scanf("%d",&dis[i][j]);
                if(dis[i][j]!=0)
                mi= min(mi,dis[i][j]);
            }
        }
        rep(i,1,n){
            rep(j,1,n){
                if(dis[i][j]==mi)sum++;
            }
        }
        printf("%d\n",sum/2);
    }
    return 0;
}

F - Halli Galli

题目
在这里插入图片描述
每局只发一张牌,用个map记录一下每局的情况就好了。

#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (ll i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 2e5 + 7;
const int M = 1e2+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
struct node
{
    char card='Z';
    int num=0;
}peo[10];
int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(NULL);
    int t;
    scanf("%d",&t);
    while (t--){
        int n,k;
        int ans=0;
        scanf("%d%d",&k,&n);
        map<char,int>mp;
        for(int i=1;i<=10;i++){
            peo[i].card='Z';
            peo[i].num=0;
        }
        rep(i,1,k){
            int j=i%n;
            if (j==0)j=n;
            getchar();
            scanf("%c %d",&peo[j].card,&peo[j].num);
            mp.clear();
            rep(l,1,n){
                mp[peo[l].card]+=peo[l].num;
            }
            if(mp['A']==5)ans++;
            if(mp['B']==5)ans++;
            if(mp['G']==5)ans++;
            if(mp['P']==5)ans++;
        }
        printf("%d\n",ans);
    }
    return 0;
}

G - Color the blocks

在这里插入图片描述
找规律,第j列和j+2列相同,第j列要么是黑白相间要么全黑全白.n>=4时,j和j+1列不同,此时只有4种,所特判n<4。

#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (ll i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 1e3 + 7;
const int M = 3e5+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
ll d[N][N];
int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(NULL);
    int t;
    scanf("%d",&t);
    while (t--){
        int n;
        scanf("%d",&n);
        if(n==1)puts("2");
        else if(n==2)puts("16");
        else if(n==3)puts("32");
        else puts("4");
    }
    return 0;
}

H - August

还不会。

I - Goodbye

在这里插入图片描述
要让自己不能选出除1,n’之外的因数,那么n’为质数,所以找到最初的n的最大的两个质因数就是答案,找不到时再判断n是否为质数。

#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (ll i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 1e5 + 7;
const int M = 1e5+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
bool vis[N];
int prime[M];
int cnt=0;
int num[M];
void create(int n) {
    for (int i = 2; i <= n; i++) {
        if (!vis[i])
            prime[++cnt] = i;
        for (int j = 1; j <= cnt; j++) {
            if (i * prime[j] > n)
                break;
            vis[i * prime[j]] = true;
            if (i % prime[j] == 0)
                break;
        }
    }
}
int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(NULL);
    int t;
    scanf("%d",&t);
    create(1e5);

    while (t--){
        memset(num,0,sizeof num);
        int n;
        int k=0;
        scanf("%d",&n);
        for(int i=1;prime[i]*prime[i]<=n;i++){
            while (n%prime[i]==0)
            {
                n/=prime[i];
                num[++k]=prime[i];
            }
        }
        if(n>1)num[++k]=n;
        if(k==1)puts("0");//等于1说明自身是质数。
        else if(k==2)puts("-1");
        else{
            printf("%d\n",num[k]*num[k-1]);
        }
    }
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值