有人问我为什么2013在2014之后?
那是因为。。。。。。你丑(这句划掉)
2013年难啊!
……
第一题:计数问题
题面简述:试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?
陷阱提示:这道题和之前的数字统计有异曲同工之妙~
数据范围:对于 100%的数据, 1≤n≤1,000,000 , 0≤x≤9 。
思路描述:这道题需要换一点做法。不断地对数i取余10,直到该数小于10为止。这样可以去除i的每一位。
我的代码:
#include <cstdio>
int main(){
int i,j,n,m,x;
int l,r,count=0;
scanf("%d%d",&n,&x);
long num = 0;
for(i=1;i<=n;i++){
j = i;
while(j>0){
if(j%10==x) num++;
j/=10;
}
}
printf("%d",num);
}
洛谷原题:http://www.luogu.org/problem/show?pid=1980
第一题完。
第二题:表达式求值
题意简述:给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
陷阱提示:注意 优先级!
数据范围:0≤表达式中加法运算符和乘法运算符的总数≤100000。
思路描述:这里讲究的是输入。这里要一边输入一遍判断。如果当前输入的是符号,那么开始计算即可。
我的代码:
/*
作者:xiaoyao24256
题目:p3292 表达式求值
*/
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
long long int a,sum=0,tot = 0;
int i,j,k,n,m;
char c;
scanf("%lld",&sum);
sum%=10000;
while(scanf("%c",&c)!=EOF&&(c=='*'||c=='+'))
{
scanf("%lld",&a);
a%=10000;
// cout<<"a= "<<a<<endl;
if(c == '*'){
sum=(sum*a)%10000;
}
// cout<<"sum="<<sum<<" tot="<<tot<<" a="<<a<<endl;
if(c=='+'){
tot=(tot+sum)%10000;
sum=a;
}
}
tot+=sum;
tot%=10000;
cout<<tot;
}
洛谷原题:http://www.luogu.org/problem/show?pid=1981
第二题完。
第三题:小朋友的数字
题意简述:给定一个长n的数列,每个数字有一个特征值,为它之前的最大字段和,每个数字有一个分数,为它前面数字的特征值加上它本身的特征值。求出这个数列中最大的一个分数。
陷阱提示:这里不能忽略负数。
数据范围:
1≤n≤1,000,000
,
1≤p≤109
,其他数字的绝对值均不超过
109
。
思路描述:这道题其实也十分简单。用最大字段和求一下特征值,然后设数1的分数为它本身,就可以完美解决这一道题目。这道题的答案有可能在两个地方:第一个数字和最后一个数字。如果在后面的序列中有任何一个数比第一个数大,就输出最后一个数,否则输出第一个数(的分数)
我的代码:
#include<iostream>
#include<cstdio>
#define MAXN 1000001
using namespace std;
bool flag;
long long n,m,f[MAXN],a[MAXN],tot,g[MAXN],w[MAXN];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
f[1]=a[1];
long long maxx=a[1];
w[1]=a[1];
for(int i=2;i<=n;i++)
{
f[i]=max(f[i-1]+a[i],a[i]);
w[i]=max(w[i-1],f[i]);
}
g[1]=w[1];
g[2]=w[1]+g[1];
if(g[2]>=g[1])
flag=1;
for(int i=3;i<=n;i++){
if(w[i-1]>0){
g[i]=(w[i-1]+g[i-1])%m;
if(g[i]>g[1]) flag=1;
}
else g[i]=g[2];
}
if(flag)
printf("%d",g[n]);
else
printf("%d",g[1]%m);
return 0;
}
洛谷原题:http://www.luogu.org/problem/show?pid=1982
第三题,猝。
抱歉,第四题我实在无能为力。
对不起。