🌼All Falls Down (Acoustic) - Adam Christopher - 单曲 - 网易云音乐
心仪的鞋子断码了,就去旁边店买一件漂亮的大衣。常去的面馆停业了,就去别家吃一碗好吃的粉。喜欢的人离开了,就好好上课好好工作挣更多的钱。有无数种方式可以让自己开心,也有无数条大路可以通向未来。人会成长,曾经沉迷的东西都会沦为可有可无的消遣。没有什么是不可替代的
目录
一,垂直直方图
P1069 - 垂直直方图 - New Online Judge (ecustacm.cn)
标签:入门题
1,输入多行包含空格字符串,string s; + while(getline(cin, s)) + s.size()
头文件是#include<string>
2,输入完毕后,回车 + ctrl和z + 回车
3,注意,每个'*'和字母之间,还有个空格,而且不能打印多余空行/空格
所以第一次输出了这个
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOUR
HISTOGRAM PROGRAM.
HELLO!
^Z
*
*
* *
* * * *
* * * *
* * * * * *
* * ** ** * ***
* * *** ** ** ****
* ****** ***** **** **
**************************
ABCDEFGHIJKLMNOPQRSTUVWXYZ
考虑到空格,只需修改代码第20行往后的即可
char c[Max + 1][26] = {' '};
改成
char c[Max + 1][51] = {' '};
其他对应着改
然后我就提交了
WA 代码
#include<iostream>
#include<string> //getline(cin, s);
#include<algorithm> //sort()
using namespace std;
int a[60], b[60]; //a[]统计字母出现次数
int main()
{
string s;
while(getline(cin, s)) //每次输入都统计字符数
for(int i = 0; i <= s.size(); ++i) {
if(s[i] >= 'A' && s[i] <= 'Z')
a[s[i] - 'A']++;
}
for(int i = 0; i < 26; ++i) b[i] = a[i];
sort(b, b + 26); //对26个字母次数排序
int Max = b[25]; //最大出现次数
//由此确定了Max + 1行, 51列的二维数组
char c[Max + 1][51] = {' '}; //初始化为空格
for(int i = 0; i < 51; ++i) { //第0~50列
if(i % 2 == 0) c[Max][i] = 'A' + i / 2;
int j = Max - a[i];
while(j <= Max - 1) {
c[j++][2*i] = '*';
}
}
for(int i = 0; i < Max + 1; ++i) {
for(int j = 0; j < 51; ++j)
cout<<c[i][j];
if(i != Max) cout<<endl;
}
return 0;
}
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOUR
HISTOGRAM PROGRAM.
HELLO!
^Z
*
*
* *
* * * *
* * * *
* * * * * *
* * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
跑对拍也没什么问题,咋就WA了呢,找不到任何问题
来了个别人相似思路的代码凑数算了
AC 代码
#include<stdio.h>
int main()
{
char a;
int b[26]={0};
while(scanf("%c",&a)!=EOF){
if(a>=65&&a<=90);
int k=a-65;
b[k]++;
}
int max=0;
int i=0;
for(i=0;i<26;i++){
if(b[i]>max){
max=b[i];
}
}
int h=max+1;
char p[h][26]={' '};
int x;
int y;
for(y=0;y<26;y++){
for(x=h-1;x>=0;x--){
if(x==h-1){
int r=y+65;
p[x][y]=r;
continue;
}
if(b[y]>0){
p[x][y]='*';
b[y]--;
}
else{
p[x][y]=' ';
}
}
}
int ii;
int jj;
for(ii=0;ii<h;ii++){
for(jj=0;jj<26;jj++){
if(jj==0)
printf("%c",p[ii][jj]);
else
printf(" %c",p[ii][jj]);
}
printf("\n");
}
return 0;
}
二,Pell数列
P1070 - Pell数列 - New Online Judge (ecustacm.cn)
标签:入门题
第一次提交,AC 5%,因为我创建了个函数,每次输入数据都要重新算一遍,效率非常低
#include<iostream>
using namespace std;
int fac(int n)
{
int a[10010] = {0};
a[1] = 1, a[2] = 2;
if(n <= 2) return a[n];
else {
for(int i = 3; i <= n; ++i)
a[i] = a[i - 1] * 2 + a[i - 2];
return a[n] % 32767;
}
}
int main()
{
int m;
cin>>m;
while(m) {
int n;
cin>>n;
cout<<fac(n)<<endl;
m--;
}
return 0;
}
第二次提交,还是运行错误,,还是AC 5%
#include<iostream>
using namespace std;
int a[100010];
int main()
{
a[1] = 1, a[2] = 2;
for(int i = 3; i <= 100000; ++i)
a[i] = (a[i - 1] * 2 + a[i - 2]) % 32767;
int m;
cin>>m;
while(m) {
int n;
cin>>n;
cout<<a[n]<<endl;
m--;
}
return 0;
}
第三次,AC 100%,真6啊,数组得开到100万,看漏题了🤦
#include<iostream>
using namespace std;
int a[1000010];
int main()
{
a[1] = 1, a[2] = 2;
for(int i = 3; i <= 1000000; ++i)
a[i] = (a[i - 1] * 2 + a[i - 2]) % 32767;
int m;
cin>>m;
while(m) {
int n;
cin>>n;
cout<<a[n]<<endl;
m--;
}
return 0;
}
三,谁做好事
P1071 - 谁做好事 - New Online Judge (ecustacm.cn)
标签:入门题
分4种可能直接猜当然可以,显然是C做的好事,但我想用代码实现这个过程
#include<iostream>
using namespace std;
int main()
{
char good = 'A';
for(int i = 0; i < 4; ++i) {
good = 'A' + i; //对应A,B,C,D四个人
if((good != 'A') + (good == 'C') +
(good == 'D') + (good != 'D') == 3) {
cout<<good;
break;
}
}
return 0;
}
C
四,爬楼梯
P1072 - 爬楼梯 - New Online Judge (ecustacm.cn)
标签:入门题
审清题意很重要,我一开始以为是,每次可以走1~K级台阶,想了十分钟没想出来,百度也没有
后来一看,原来是走1级或K级。。。
第一次AC 20%,原来是很多情况没考虑,所以修改了一下,分类讨论有点多
#include<iostream>
using namespace std;
int a[100];
int fac(int n, int k)
{
for(int i = 4; i <= n; ++i) {
if(i > k)
a[i] = a[i - 1] + a[i - k];
else if(i == k)
a[i] = a[i - 1] + 1;
else
a[i] = a[i - 1];
}
}
int main()
{
int n, k;
cin>>n>>k;
if(n == k) cout<<2;
if(n == 2 && k >= 3) cout<<1;
if(n == 3 && k == 2) cout<<3;
if(n >= 4 && n != k) {
a[1] = 1; a[2] = 1 + 2 / k;
if(k >= 4) a[3] = 1;
if(k < 4) a[3] = 1 + 4 / k;
fac(n, k);
cout<<a[n];
}
return 0;
}
先对特殊情况讨论,再在fac()函数中对 i 和 k的大小关系讨论
考虑到蓝桥杯是IOI赛制,我们需要弄多点样例来检验,并根据样例快速调试
比如我列了4组数据检验是否正确
5 4
3
10 10
2
8 3
13
5 2
8
数据未必要多么大,但一定要尽可能考虑全,至于数组和int超限这个,按经验来
五,斐波那契数列
P1073 - 斐波那契数列 - New Online Judge (ecustacm.cn)
标签:入门题
这题比上一题简单一点,不用分类讨论
第一次时间超限AC 60%,老问题了,只需要打表一次,后面直接调用
#include<iostream>
using namespace std;
int a[1000010];
int fac(int x)
{
for(int i = 3; i <= x; ++i)
a[i] = (a[i - 1] + a[i - 2]) % 1000;
}
int main()
{
int t, x;
cin>>t;
a[1] = 1; a[2] = 1;
fac(1000010);
while(t) {
cin>>x;
cout<<a[x]<<endl;
t--;
}
return 0;
}
六,传染病
P1074 - 传染病 - New Online Judge (ecustacm.cn)
标签:入门题
#include<iostream>
using namespace std;
int main()
{
int n, x, sum = 1;
cin>>n>>x;
for(int i = 0; i < n; ++i) {
sum += sum * x;
}
cout<<sum;
return 0;
}
我试了试输入30 30,早就超过了long long的范围,正准备用高精度,一看通过率高达70%。。
七,求f(x, n)
P1075 - 求f(x,n) - New Online Judge (ecustacm.cn)
#include<iostream>
#include<cstdio> //printf()
#include<cmath> //sqrt()
using namespace std;
double a[110];
int main()
{
double x;
int n;
cin>>x>>n;
a[1] = sqrt(1 + x);
for(int i = 2; i <= n && n >= 2; ++i) {
a[i] = sqrt(i + a[i - 1]);
}
printf("%.2f", a[n]);
return 0;
}
八,再求f(x, n)
P1076 - 再求f(x,n) - New Online Judge (ecustacm.cn)
标签:入门题
n 和 i 要声明为int,因为是数组下标,而数组本身和x要声明为double,这样才符合题目保留两位小数的要求
#include<iostream>
#include<cstdio> //printf()
using namespace std;
double a[55];
int main()
{
double x;
int n;
cin>>x>>n;
a[1] = x / (1 + x);
for(int i = 2; i <= n && n >= 2; ++i) {
a[i] = x / (i + a[i - 1]);
}
printf("%.2f", a[n]);
return 0;
}
总结
1,76道入门题就告一段落了,最短路只学了个Floyd-Warshall和Dijkstra,也是半吊子的货
2,至于最小生成树,图的割点割边,二分图,Bellman-Ford最短路,就先放放,确实有点难,看了蓝桥杯遇到也不能速成做出来
3,下面该花5个小时学习树(然后《啊哈算法》结束学习)
4,接着开始刷题,自己选定3~5个最常考点,每个考点对着标签刷10道题左右
5,当然,我还报了2/13 ~ 3/13的蓝桥杯每日一题,跟着学总不会错
6,最后就是,20~22年蓝桥杯A,B,G组,刷30道C++蓝桥杯真题
7,最后就是总结,以及蓝桥杯编译环境的熟悉(OI确实比IOI难拿分)(没有反馈,只能多准备点例子调试自己的代码)