清北学堂国庆day6解题报告
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了清北学堂国庆day6解题报告相关的知识,希望对你有一定的参考价值。
Day6解题报告
张炳琪
时间安排::
T1:20分钟
T2:50分钟
T3:30分钟
答题情况和错误分析::
T1: 60
低级错误 。数组开小了少得了40分
T2:100
题目比较好想,刚开始错了一个细节,出数据调出来了
T3:100
由于考虑数据是随机的,就用了n^2的复杂度
Tot::260
题目解析:
T1:
先将数据从小到大排序,然后线性扫一遍,找出顺序颠倒的俩个数字,判断能否将两个数字移动,
T2:
递推三次,不停加a1找到符合一二的,不停加lcm(a1,a2)找到符合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",¬e[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",¬e[i].a,¬e[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解题报告的主要内容,如果未能解决你的问题,请参考以下文章