T1】记数问题

试计算在区间1 到n 的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?例如,在1到11 中,即在1、2、3、4、5、6、7、8、9、10、11中,数字1 出现了4 次。

其实这个问题也很经典了。。。

别想很复杂,其实打暴力完全OK

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<set>
using namespace std;
const int maxn=1010;
const int INF=0x3fffffff; int n,x;
int main(){
cin>>n>>x;
int ans=0;
for(int i=1;i<=n;i++){
int temp=i;
while(temp){
if(temp%10==x) ans++;
temp/=10;
}
}
cout<<ans<<endl;
return 0;
}

  

T2】表达式求值

这种题也是经典题

但是这下面是一种很...奇妙的做法

在加法那里处理还没处理完的乘法

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<set>
using namespace std;
const int maxn=1010;
const int INF=0x3fffffff;
//简单化的表达式求值
//只有加、乘
/*
stack<long long> num;
stack<char> op;
char a[100001];
int lev(char x){ //计算优先级
if(x=='+') return 1;
if(x=='*') return 2;
return 0;
}
void js(stack<long long> &num,stack<char> &op){
int y=num.top();
num.pop();
int x=num.top();
num.pop();
char xx=op.top();
op.pop();
if(xx=='+') num.push((x+y)%10000);
else num.push((x*y)%10000);
}
*/
//下面的这个写法不知道为什么超时了
//管他的,用一种简单的特殊写法
int last;
char c;
int x,a=0,b=1,sum=0;
int main(){
int i,j;
bool flag=1;
do{
if(cin>>c);
else{
flag=0;
c='+'; //在最后补一个+号
}
if(c>='0'&&c<='9'){
x=x*10+c-'0';
}
else{
a=x;
x=0;
}
if(c=='*'){
last=1;
b=(a*b)%10000; //处理乘数
}
if(c=='+'){
if(last){
a=(a*b)%10000; //a是另一个乘数
sum=(sum+a)%10000;
b=1;
last=0;
}
else sum+=a;
}
}while(flag);
cout<<sum%10000<<endl; return 0;
} /*
int main(){
scanf("%s",a+1);
int len=strlen(a+1);
bool flag=0;
long long temp=0;
for(int i=1;i<=len;i++){
if(a[i]>='0'&&a[i]<='9'){
temp=temp*10+a[i]-'0';
flag=true;
}
else{
if(flag){
num.push(temp);
temp=0;
flag=false;
}
while(!op.empty()&&(lev(op.top())>=lev(a[i]))) js(num,op);
op.push(a[i]);
} }
if(flag){
num.push(temp);
temp=0;
flag=false;
}
while(!op.empty()){
js(num,op);
}
cout<<num.top()%10000<<endl;
return 0;
} */

  

T3  小朋友的数字

这道题涉及到一个细节,取余所导致的结果不同和太大值之间的问题

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<set>
using namespace std;
const int maxn=1000001;
const int INF=0x3fffffff;
long long res[maxn],d[maxn],dp[maxn];
//d[i]是特征值,res是得分,dp是前i项的和,dp[i]=max(0,dp[i-1])+x
//d[i]=max(d[i-1],dp[i]) res[i]=max(res[i-1],res[i-1]+d[i-1])
long long n,p;
//但是注意结果有20分拿不到,因为数据范围,如果在计算过程种可能会超过Long long,所以必须边算边取模
//但是取模就无法比较最大值,所以不能直接用Max,但是从第二个人开始分数是没有下降的,所以再运算过程种如果超过Longlong就可以去模
//因为res[1]是不超过long long的,所以在运算过程中一旦超过long long就说明是最大的是res[n], int main(){
cin>>n>>p;
int x;
dp[0]=0;
for(int i=1;i<=n;i++){
cin>>x;
dp[i]=max(0LL,dp[i-1])+x; //0后面要加LL
if(i==1) {
d[i]=dp[i];
}
else{
d[i]=max(d[i-1],dp[i]);
}
}
res[1]=d[1];
res[2]=d[1]+dp[1];
bool flag=0; //判断在n>=3的过程中,有没有超过long long
for(int i=3;i<=n;i++){
res[i]=max(res[i-1],res[i-1]+d[i-1]);
if(res[i]>1e9){
flag=1;
res[i]=res[i]%p;
}
}
if(flag) cout<<res[n]%p<<endl;
else cout<<max(res[1],res[n])%p<<endl;
return 0;
}

  

T4】车站分级

想不到是考图吧哈哈哈,但是这道题的连线端点要注意,从小的指向大的,是在从经过的车站之间没停靠的车站都是明确小于的,所以可以连线

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<set>
using namespace std;
const int maxn=1010;
const int INF=0x3fffffff;
//这道题是考图,经过大于等于比当前等级的车站,就能总结出比当前等级小的和大的,让小的指向大的
//再拓扑排序,及查找深度,就能够得出至少深度得多少
int n,m;
int to[maxn],in[maxn],mapp[maxn][maxn];
int temp[maxn],vis[maxn];
int main(){
cin>>n>>m;
int num;
for(int i=1;i<=m;i++){
cin>>num;
int x,t=0,l,r;
memset(temp,0,sizeof(temp));
memset(vis,0,sizeof(vis));
memset(to,0,sizeof(to));
for(int j=1;j<=num;j++){
cin>>x;
if(j==1) l=x;
if(j==num) r=x;
temp[j]=x;vis[x]=1;
}
for(int z=l;z<=r;z++){
if(vis[z]==0){
to[++t]=z;
}
}
//把小的都指向大的
for(int j=1;j<=t;j++){
for(int z=1;z<=num;z++) mapp[to[j]][temp[z]]=1;
}
}
//下面初始化入度
for(int i=1;i<=n;i++){
in[i]=0;
for(int j=1;j<=n;j++) if(mapp[j][i]) in[i]++;
}
int ans=1;
memset(temp,0,sizeof(temp));
while(true){
bool f=0;
for(int i=1;i<=n;i++){
temp[i]=in[i];
}
for(int i=1;i<=n;i++){
if(temp[i]==0) {
for(int j=1;j<=n;j++){
if(mapp[i][j]){
mapp[i][j]=0;
in[j]--;
}
}
}
else f=1; //如果没有说明还需要继续循环
} if(f==0) break; //如果没有更新了就可以退出
ans++;
}
cout<<ans<<endl;
return 0;
}

  

NOIP2013普及组的更多相关文章

  1. [NOIP2013] 普及组

    计数问题 纯模拟 #include<cstdio> #include<iostream> using namespace std; int main(){ int n,x; c ...

  2. NOIP2013普及组 -SilverN

    T1  计数问题 题目描述 试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1 到 11 中,即在 1.2.3.4.5.6.7.8.9.10.11 中, ...

  3. NOIP2013普及组 T2 表达式求值

    OJ地址:洛谷P1981 CODEVS 3292 正常写法是用栈 #include<iostream> #include<algorithm> #include<cmat ...

  4. 【NOIP2013 普及组】车站分级

    [NOIP2013 普及组]车站分级 一.题目 [NOIP2013 普及组]车站分级 时间限制: 1 Sec  内存限制: 128 MB 提交: 3  解决: 0 [提交][状态][讨论版] 题目描述 ...

  5. [NOIP2013 普及组] 表达式求值

    [NOIP2013 普及组] 表达式求值 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. Input 一行,为需要你计算的表达式,表达式中只包含数字.加法运算符"+" ...

  6. [NOIp2013普及组]车站分级

    思路: 对于每一趟车,将区间内所有经停的站和所有未经停的站连一条边,表示前者优先级一定高于后者,然后用Kahn跑一遍拓扑排序即可.然而这样会创造大量多余的边,会TLE1个点.考虑一种优化:因为每趟车本 ...

  7. Noip2013(普及组) 车站分级

    题目描述 一条单向的铁路线上,依次有编号为 , , …, n 的 n 个火车站.每个火车站都有一个级别,最低为 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车站 x, ...

  8. 洛谷——P1980 [NOIP2013 普及组] 计数问题

    题目描述 试计算在区间 11 到 nn的所有整数中,数字x(0 ≤ x ≤ 9)x(0≤x≤9)共出现了多少次?例如,在 11到1111中,即在 1,2,3,4,5,6,7,8,9,10,111,2, ...

  9. NOIP2002-2017普及组题解

    虽然普及组一般都是暴力省一,但是有一些题目还是挺难的qwq个人觉得能进TG的题目会在前面打上'*' NOIP2002(clear) #include<bits/stdc++.h> usin ...

  10. NOIP2012 普及组 T3 摆花——S.B.S.

    题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...

随机推荐

  1. CSS入门学习笔记

    CSS入门学习笔记一.CSS简介1.什么是CSS?2.为什么使用CSS?3.CSS的作用二.CSS语法1.CSS基础语法2.CSS注释语法3.CSS应用方法三.CSS选择器1.元素选择器2.类选择器3 ...

  2. Python基于粒子群优化的投资组合优化研究|附代码数据

    全文链接:http://tecdat.cn/?p=6811 最近我们被客户要求撰写关于粒子群优化的研究报告,包括一些图形和统计输出. 我今年的研究课题是使用粒子群优化(PSO)的货币进位交易组合优化. ...

  3. ubuntu22.04LTS下编译glfw

    环境准备 # 预装cmake sudo apt install cmake # 下载源码 git clone https://github.com/glfw/glfw.git 编译 # cmake初始 ...

  4. Pods与Nodes

    Pod是Kubernetes抽象出来表示一组应用容器(比如Docker.rkt),还有这些容器共享的资源.这些资源包括: 共享存储,比如Volumes 网络,比如独立的集群IP地址 如何去运行每个容器 ...

  5. Linux 系统jdk安装详细教程

    安装jdk步骤先下载jdk的tar压缩包然后解压jdk并压缩至指定安装目录,如果不需要指定安装目录直接写tar -zxvf jdk压缩包名即可tar -zxvf jdk压缩包 -C /这里写指定安装目 ...

  6. Spark On Hive

    配置 MySQL 通过官网下载并解压: tar -zxvf mysql-8.0.31-el7-x86_64.tar.gz -C /usr/local 重命名: mv mysql-8.0.28-el7- ...

  7. IDEA debug时拷贝数据 Evaluate Expression窗口

    今日份鸡汤:别人再好,也是别人.自己再不堪,也是自己,独一无二的自己.只要努力去做最好的自己,一生足矣.为自己的人生负责,为自己的梦想买单. 用IDEA调试时候经常需要拷贝变量值出来排查,特别是数据结 ...

  8. 《SAP MDM主数据管理》.pdf

    <SAP MDM主数据管理>.pdf 有需要的联系 wx :erpworld

  9. 为什么MeshLambertMaterial和MeshPongMaterial不可见

    在编程时发现对于同样的球体,MeshBasicMaterial可见,但是MeshLambertMateril和MeshPongMaterial不可见. 原因是这两种材质需要光照才能显示. 如果加了光照 ...

  10. TCP协议之三次握手(二)

    本节主要研究三次握手出现的一些异常情况和编程相关的知识: 上一节分析了三次握手的过程,本节会回答一些三次握手的小问题,然后利用linux系统调用实践一下简单的网络的编程. 三次握手的常见问题 Q 向一 ...