CSUST 8.5 早训

## Problem A

A - Meeting of Old Friends

CodeForces - 714A

题意:

解题说明:此题其实是求两段区间的交集,注意要去除掉交集中的某个点。

题解:

C++版本一

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>

int main()
{
    long long int l1,r1,l2,r2,k,x,y;
    scanf("%lld%lld%lld%lld%lld",&l1,&r1,&l2,&r2,&k);
    x=(l1>=l2)?l1:l2;
    y=(r1<=r2)?r1:r2;
    if(r1<l2||r2<l1)
    {
        printf("0\n");
    }
    else
    {
        if(x<=k&&k<=y)
        {
            printf("%lld\n",y-x);
        }
        else
        {
            printf("%lld\n",y-x+1);
        }
    }
    return 0;
}

## Problem B

B - Filya and Homework

CodeForces - 714B

题意:

给定一个序列,对于每一个元素,只能 + 或者 - 一个数val。这个数一旦选定,就不能改。

问能否变成全部数字都一样。

题解:

这题的正解是观察法。也可以证明。

①、全部数字都一样、有两个不同数字、三个不同数字(a[1] + a[3] =  2 * a[2])这些都易懂

那4个不同数字为什么是no呢

可以想象成找不到一个点,作为圆心,包含另外3个点(这3点在一直线)。

所以对于有三个不同数字那个,其实就是判断是否为圆心。

C++版本一

#include <bits/stdc++.h>
using namespace std;
const int N = 5000000+10;
int a[N];
int main(int argc, char const *argv[])
{
int n;
cin >> n ;
for(int i = 1;i <= n ; i ++) cin >> a[i];
    sort(a + 1, a + 1 + n );
 int x  = unique(a+1,a + n+1) - a - 1;
//cout << a[1] << a[2] << a[3] << a[4] << endl;
//cout << x << endl;
if(x < 3 || (x == 3 &&a[2] - a[1] == a[3] - a[2] )){
    cout << "YES" << endl;}
    else cout << "NO" << endl;
    return 0;

}

## Problem C

C - Sonya and Queries

CodeForces - 714C

题意:

题解:

字典树

C++版本一

#include <bits/stdc++.h>
using namespace std;
const int N = 5000000+10;
struct Trie
{
    int ch[N][3];
    int sz;
    int val[N];
    void Init()
    {
        sz=1;
        memset(ch,0,sizeof ch);
        memset(val,0,sizeof val);
    }

    void Insert(char *num,int op)
    {
        int u=0;
        for(int i=20;i>=strlen(num);i--)
        {
            if(ch[u][0]==0)
                ch[u][0]=sz++;
            u=ch[u][0];
        }
        for(int i=0;i<strlen(num);i++)
        {
            int c=(num[i]-‘0‘)%2;
            if(ch[u][c]==0)
                ch[u][c]=sz++;
            u=ch[u][c];
        }
        val[u]+=op;
    }

    int Find(char *num)
    {
        int u=0;
        int cur=0;
        for(int i=20;i>=strlen(num);i--)
        {
            if(ch[u][0]==0)
                return 0;
            u=ch[u][0];
            cur+=val[u];
        }
        for(int i=0;i<strlen(num);i++)
        {
            int c=(num[i]-‘0‘)%2;
            if(ch[u][c]==0)
                return 0;
            u=ch[u][c];
            cur+=val[u];
        }
        return cur;
    }
};
Trie trie;
int main()
{
    trie.Init();
    int q;
    scanf("%d",&q);
    getchar();
    while(q--)
    {
        char s[2];
        char x[20];
        scanf("%s%s",s,x);
        //cout<<"x="<<x<<endl;
        if(s[0]==‘+‘)
            trie.Insert(x,1);
        if(s[0]==‘?‘)
            printf("%d\n",trie.Find(x));
        if(s[0]==‘-‘)
            trie.Insert(x,-1);
    }
    return 0;
}

## Problem D

D - Crazy Computer

CodeForces - 716A

题意:

题意:录入n个数,c为临界值,如果n个数中相邻的相减小于c就记录如果有一次不满足就删去前面记录的数,最后输出屏幕上存了几个数。

题解:

题意:录入n个数,c为临界值,如果n个数中相邻的相减小于c就记录如果有一次不满足就删去前面记录的数,最后输出屏幕上存了几个数。

C++版本一

#include <bits/stdc++.h>
using namespace std;
const int N = 5000000+10;
int a[N];

int main(int argc, char const *argv[])
{
    int n , k;
    cin >> n >> k ;
    long long sum =  0;
    for(int i = 1;i <= n ;i ++){
        int  x;
        //cin >> x;
        cin >> a[i];
        if(a[i] - a[i - 1] > k) sum = 0;
        sum ++;

    }
    cout << sum << endl;
    return 0;
}

## Problem E

E - Complete the Word

CodeForces - 716B

题意:

题目要求的是输出全部字符串!不是满足条件的子串!!

题解:

从前往后暴力搜索满足条件的即可,依次搜26个字母。

当然如果总长度小于26肯定输出-1。

最后处理好?的填充处理就行了。

C++版本一

#include <bits/stdc++.h>
using namespace std;
const int N = 5000000+10;
int a[N];
int vis[30];
char str[1000005];
int main(int argc, char const *argv[])
{
//string str;
    cin >> str;
    int n = strlen(str);
    int i = 0 ;
    if(n < 26) {
        printf("-1\n");
        return 0;
    }
    bool flag = 1;
    for(int i = 0;i <= n - 26 && flag; i ++){
        int tail1 = 0 , tail2 = 0;
          memset(vis,0,sizeof vis);
        for(int j = i;j < i +  26 ;j ++){
            if(str[j] >= ‘A‘ && str[j] <= ‘Z‘){
              //  cout << str[j] - ‘A‘ << " " << j - i << endl;
                vis[str[j] - ‘A‘] ++;
            }else tail2 ++;
           // if(j = i + 25) break;
        }
        for(int j = 0;j < 26;j ++){
            if(vis[j] == 1)
            tail1 ++;
        }
        if(tail1 + tail2 == 26){
            int t = 0;
            for(int j = i;j < i + 26;j ++){
                if(str[j] == ‘?‘){
                    for(;t < 26;t ++){
                        if(vis[t] == 0){
                            str[j] = ‘A‘ + t;
                            t++;
                            break;
                        }
                    }
                }
            }
            flag = 0;
        }

        //if(flag)
    }
    for(int i = 0;i < n;i ++){
        if(str[i] == ‘?‘){
            str[i] = ‘A‘;
        }
    }
    if(flag) cout << -1 << endl;
    else cout << str << endl;
    return 0;
}

## Problem F

F - Plus and Square Root

CodeForces - 716C

题意:

题意:开始给你个数x=2,然后等级k为1,然后开始加等级k,如果x是完全平方数并且开方后是k+1的倍数,就对x开方,然后等级增加一级,问每升高一级需要加多少次

题解:

找规律

等级k      初始数字       加的次数*等级k       得到x         开根号后的x                       关系

√x  /  (k+1) = k

1               2                   +2 * 1                 4                     2                           2   /  2   =  1

2               2                   +17 * 2              36                    6                           6   /  3   =  2

3               6                   +46 * 3              144                  12                        12  /  4   =  3

4              12                  +97 * 4              400                  20                        20  /  5   =  4

所以可以得到关系递推式:

(k-1)*k       +       k*n         =         ( k*(k+1))²

上一级开根         次数*等级                  新的完全平方数x

号得到的x

所以每次所需要加的次数n =( (k*(k+1))² - (k-1)*k)/k  = k*(k+1)² - (k-1)

C++版本一

#include <bits/stdc++.h>
using namespace std;
const int N = 5000000+10;
int a[N];
int vis[30];
char str[1000005];

int main(int argc, char const *argv[])
{
    long long n ;
    cin >> n ;
    if(n == 1){
        cout << "2" << endl;
    }
    else{
        //int ans = 2;
        cout << "2" << endl;
        //3int k = 2;
        for(long long i = 2;i <= n ;i ++){
            cout << (i * (i + 1)*(i+1) - i + 1) << endl;
           // k = sqrt(k * (i + 1) + 1);
          //  ans ++;
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/DWVictor/p/11305178.html

时间: 2024-08-29 20:08:20

CSUST 8.5 早训的相关文章

CSUST 8.3 早训

A - Settlers' Training CodeForces - 63B 题意 给你一串数字,相同的数字为一组,每次可以给一组中的一个数字加一,问这一串数字全变成K需要多少步? 题解 模拟 C++代码 /** /*@author Victor /*language C++ */ //#include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #inc

CSUST 8.4 早训

## Problem A A - Memory and Crow CodeForces - 712A 题意: 分析可得bi=ai+ai+1 题解: 分析可得bi=ai+ai+1 C++版本一 #include<bits/stdc++.h> using namespace std; const int maxn = 1e5 + 7; int a[maxn]; int main(int argc, char const *argv[]) { int n; cin >> n ; for(

C - Ordering Pizza CodeForces - 867C 贪心 经典

C - Ordering Pizza CodeForces - 867C C - Ordering Pizza 这个是最难的,一个贪心,很经典,但是我不会,早训结束看了题解才知道怎么贪心的. 这个是先假设每个人都可以吃到他喜欢的,就是先求出答案,然后按照b-a 排序,分别放入两个优先队列里面, 如果b>a 那就吃第二块,否则就吃第一块,求出num,注意优先队列按照从小到达排序. num1记录第一块吃的数量,num2记录第二块吃的数量. num1%=s,num2%=s  如果num1+num2的数

B - Save the problem! CodeForces - 867B 构造题

B - Save the problem! CodeForces - 867B 这个题目还是很简单的,很明显是一个构造题,但是早训的时候脑子有点糊涂,想到了用1 2 来构造, 但是去算这个数的时候算错了... 用1 2 来构造 可以先枚举一些数来找找规律. 1 1 2 2 3 1 1 1    2 1 1 4 .... 可以发现每一个数都是 n/2+1 的可能, 所以反过来推过去就是 (s-1)*2  或者(s-1)*2+1 这个(s-1)*2+1的答案才是正确答案 因为 这个s可以==1 #i

哈佛图书馆自习室墙上的训言——觉得为时已晚的时候,恰恰是最早的时候——不是缺乏时间,而是缺乏努力

哈佛图书馆自习室墙上的训言1.此刻打盹,你将做梦:而此刻学习,你将圆梦. 2.我荒废的今日,正是昨日殒身之人祈求的明日. 3.觉得为时已晚的时候,恰恰是最早的时候. 4.勿将今日之事拖到明日. 5.学习时的苦痛是暂时的,未学到的痛苦是终生的. 6.学习这件事,不是缺乏时间,而是缺乏努力. 7.幸福或许不排名次,但成功必排名次. 8.学习并不是人生的全部.但,既然连人生的一部分——学习也无法征服,还能做什么呢? 9.请享受无法回避的痛苦. 10.只有比别人更早.更勤奋地努力,才能尝到成功的滋味.

山西高平地域文化导入美术设计实训项目的实践

地域文化,是指某个地域的人们在特定的范围内,在自然环境的基础上,在长期的生产生活中创造的.人类活动的产物.山西高平是神农炎帝的故里,长平之战的发生地,是一个有着很深文化积淀的新兴城市,行政区域是国土面积的万分之一,却浓缩了中国五千年文化的精髓.本文通过对山西高平丰富的历史文化资源的调查研究,探讨如何将地域文化元素导入中职美术设计专业的实训项目教学过程,论证典型地域文化元素在中职美术设计教育中的独特作用,并以此作为教学实训素材,依托带有典型地域文化特征的企业真实案例,结合教育教学实践,探索中职美术

伊斯兰教义最早的中文记载

最早用中文记载伊斯兰教义的文献是唐人杜环的<经行记>. <经行记>是杜环因怛罗斯战役失败被俘后,居大食12年历游各地的闻见录.可惜此书早佚.所幸<通典>中还存有该书的几条引文.从这些引文中,我们可以得知,<经行记>对伊斯兰教义的最高信仰和礼拜斋戒等重要功课都记述得正确而具体,这不只在<经行记>以前没有过,就是在<经行记>之后的唐宋记载中,也没有过. 据<通典>卷193的引文,<经行记>说,大食国一名叫“亚俱罗”

哈佛图书馆上的训言

哈佛图书馆上的训言(转) 1.此刻你打盹,你将做梦:而此刻你学习,你将圆梦. 2.我荒废的今日,正是昨天殒身之人祈求的明日. 3.觉得为时已晚的时候,恰恰是最早的时候. 4.勿将今日之事拖到明日. 5.学习时的痛苦是暂时的,未学到的痛苦是终生的. 6.学习这件事,不是缺乏时间,而是缺乏努力. 7.幸福或许不排名次,但成功必排名次. 8.学习并不是人生的全部.但既然连人生的一部分---学习也无法征服,还能做什么呢? 9.请享受无法回避的痛苦. 10.只有比别人更早,更勤奋的努力,才能尝到成功的滋味

产品黑客特训营——产品构建&amp;运营实战【7月6-9日姜大胡子】

<产品黑客>--产品构建&运营实战,由大胡子老师携手跨界引导师团队带来三天.两晚.四次线上分享,内容包含产品构建方法.产品运营.修炼全脑思维.视觉设计.跨界引导等,以及奔驰.阿里巴巴经典案例,为您呈现一种全新的课堂体验,7月6-8日 北京 不见不散. 互联网时代, 如何才能构建一款优秀的产品? 下?个趋势到底在哪里? 怎样才能构建?个高粘度的线上社群? 如何完成从0到1的冷启动? 『互联网+』,到底+的是什么?怎么+? 如何洞察用户心理,让用户无法不买? 怎么才能做到有效传播? 如何撰