清北学堂国庆day6解题报告

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了清北学堂国庆day6解题报告相关的知识,希望对你有一定的参考价值。

Day6解题报告

张炳琪

时间安排::

T1:20分钟

T2:50分钟

T330分钟

答题情况和错误分析::

T1 60

低级错误 。数组开小了少得了40

T2100

题目比较好想,刚开始错了一个细节,出数据调出来了

T3100

由于考虑数据是随机的,就用了n^2的复杂度

Tot::260

题目解析:

T1

先将数据从小到大排序,然后线性扫一遍,找出顺序颠倒的俩个数字,判断能否将两个数字移动,

T2

递推三次,不停加a1找到符合一二的,不停加lcma1a2)找到符合123的不停加lcm(a1,a2,a3)找到符合1234的输出即可

T3

枚举回文串中心 ,向两边扩展,暴力统计就能过

代码:

T1:

#include<cstdio>
#include<algorithm>
using namespace std;
int note[1234506];
int n;
int main()
{
    freopen("sort.in","r",stdin);freopen("sort.out","w",stdout); 
    scanf("%d",&n);
    for(int i = 1;i <= n;i++)
        scanf("%d",&note[i]);
    note[n + 1] = 0x7ffffff;
    int zz = 0;
    int k;
    for(int i = 1;i < n;i++)
        if(note[i] > note[i + 1])
            zz++,k = i;
    if(zz > 1){//超过一个肯定是不可以的 
        printf("NO");
        return 0;
    }
    if(note[k - 1] > note[k + 1]&& note[k + 2] < note[k])//如果移走这个数不行,不移走这个数也不行 
    {
        printf("NO");
        return 0;
    }
    printf("YES");
    fclose(stdin);fclose(stdout);
    return 0;
}

T2:

nclude<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
struct Note{
    int a;
    int b;
}note[123456];
int gcd(int a,int b){return b == 0 ? a : gcd(b,a % b);} 
int main()
{
    freopen("mod.in","r",stdin);freopen("mod.out","w",stdout); 
    for(int i = 1;i <= 4;i++)
        scanf("%d%d",&note[i].a,&note[i].b);
        
    long long ans = note[1].b;
    
    int lcm1 = note[1].a * note[2].a / gcd(note[1].a,note[2].a);
    int lcm2 = lcm1 * note[3].a / gcd(lcm1,note[3].a);
    
    while(ans % note[2].a != note[2].b)ans += note[1].a;
    while(ans % note[3].a != note[3].b)ans += lcm1;
    while(ans % note[4].a != note[4].b)ans += lcm2;
    
    cout << ans;
    fclose(stdin);fclose(stdout);
    return 0;
}/*
3 2 6 5 2 1 11 2 

997 234 998 123 999 654 995 233


770 277 454 53 813 319 301 241

T3

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

char s[12345];
int visited[101];
int note[301045][31];
int top = 0;
int len;
int ans = 0;
int cul = 0;
void check()
{
    cul++;
    for(int i = 0;i <= z - a;i++)
    {
        int op = note[top][i];
        if(op == 0)continue;
        if(visited[op] == cul){
            ans++;
            return;
        }
        visited[op] = cul;
    }
}

void kuozhan(int l,int r)
{
    top++;
    note[top][s[l] - a]++;
    if(l != r)
    {
        note[top][s[r] - a]++;
    }
    while("ZBQ is very handsome")
    {
        check();
        if(l == 0 || r == len - 1 || s[l - 1] != s[r + 1]){return;}
        l--;r++;
        note[top][s[l] - a]++;
        note[top][s[r] - a]++;
    }
}

int main()
{
    freopen("str.in","r",stdin);freopen("str.out","w",stdout); 
    scanf("%s",s);
    len = strlen(s);
    
    for(int i = 0;i < len;i++)
    {
        kuozhan(i,i);
        if(i == len - 1)break;
        if(s[i] == s[i + 1])
            kuozhan(i,i + 1);
    }
    cout << ans;
     fclose(stdin);fclose(stdout);
    return 0;
}

 

以上是关于清北学堂国庆day6解题报告的主要内容,如果未能解决你的问题,请参考以下文章

清北学堂国庆day1解题报告

清北学堂国庆day7解题报告

清北学堂国庆day5解题报告

清北学堂国庆day3解题报告

清北学堂国庆day4解题报告

2017.7.21夏令营清北学堂解题报告