T2  统计单词数

也是一道经典题

字符串匹配

#include<iostream>
#include<cstdio>
#include<map>
#include<vector>
#include<cstring>
using namespace std;
string a;
string jus;
int main(){
getline(cin,a);
getline(cin,jus);
//含有空格的字符串输入
int lenw=a.length();
int lena=jus.length();
for(int i=0;i<lenw;i++) {
if(a[i]>='a'&&a[i]<='z') a[i]-=32;
}
for(int j=0;j<lena;j++) {
if(jus[j]>='a'&&jus[j]<='z') jus[j]-=32;
}
int sum=0,pos=-1;
for(int i=0;i<=lena-lenw;i++){ //注意上限
int j; //呜呜呜呜要自闭了这个要写在外面,因为j在后面判断
for(j=0;j<lenw;++j){
if(a[j]!=jus[i+j]) break;
if(i>0&&jus[i-1]!=' ') break; //如果不是单词开头就结束
}
if(j==lenw&&(jus[i+j]==' '||i+j==lena)) { //!!!!!
sum++;
if(sum==1) pos=i ;
}
}
if(sum==0) cout<<"-1"<<endl;
else cout<<sum<<" "<<pos<<endl;
return 0;
}

  

T3  瑞士轮

归并排序的思想,(没想到吧)这些事基础要掌握的东西啊!!!
每打完一轮后,都要通过归并排序的思想再次确定一个顺序表(2*N)的,然后在顺序表中确定这一次的输赢结果,分别放在win,lose里面,然后再放在顺序表中

#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=200002;
const int INF=0x3fffffff;
//这道题用了归并排序的思想,排两个有序表,这两个有序表就是处理之后的输赢表
//处理好输赢表(根据能力)之后,需要再次排序(根据分数),也就是设置两个下标i,j,这样就是归并排序的思想,直接用sort的话会超时
struct node{
int fen; //分数
int rank;
int power; //能力
};
node win[maxn],lose[maxn],d[maxn];
int n,r,q;
bool cmp(node a,node b){
if(a.fen!=b.fen) return a.fen>b.fen;
else return a.rank<b.rank;
} void guibing(){
int i=0,j=0;
int index=-1;
//对有序的输赢表进行排序,用分数来排序
while(1){
if(i==n/2){
//把lose剩下的全部放进去
for(int k=j;k<i;k++){
index++;
d[index]=lose[k];
}
break;
}
else if(j==n/2){
//把win剩下的全部放进去
for(int k=i;k<j;k++){
index++;
d[index]=win[k];
}
break;
}
else{
if(win[i].fen<lose[j].fen||(win[i].fen==lose[j].fen&&win[i].rank>lose[j].rank)){
index++;
d[index]=lose[j];
j++;
}
else{
index++;
d[index]=win[i];
i++;
}
}
}
} int main(){
scanf("%d %d %d",&n,&r,&q);
n*=2;
for(int i=0;i<n;i++){
scanf("%d",&d[i].fen);
d[i].rank=i;
}
for(int i=0;i<n;i++) scanf("%d",&d[i].power);
sort(d,d+n,cmp);
for(int j=0;j<r;j++){
for(int i=0;i<n;i+=2){
int t1=d[i].power,t2=d[i+1].power,t3=i/2;
if(t1>t2){
win[t3]=d[i];
lose[t3]=d[i+1];
win[t3].fen++;
}
else{
win[t3]=d[i+1];
lose[t3]=d[i];
win[t3].fen++;
}
}
guibing(); // cout<<endl;
}
printf("%d\n",d[q-1].rank+1); return 0;
}

  

T4  表达式的值

是一道没有头绪的题目

通过保存计算结果(上一步的)

首先这道题目,我们要先搞清楚我们如何从前往后退出答案。可以肯定的是,在出现某个特定符号的时候,我们要知道如何从已知答案中推出之后的答案。这其实就是一个用公式递推的过程。每一步计算下一步答案为0或1的方法数:设两个步骤的运算结果经过每个符号到一个结果时,第一个运算结果算出0的方案数为t1,1的方案数为t2。第二个算出0的方案数为t3,算出1的方案数为t4,则有: 当符号是“⊕”时,得到0的方案数为t1*t3,1的方案数:t1*t4+t2*t3+t2*t4 当符号是“×”时,得到0的方案数为t1*t3+t1*t4+t2*t3,1的方案数:t2*t4 用一个栈记录下来即可。

然后按以下方法计算:

  1. 如果是左括号,就直接进栈;
  2. 如果是右括号,就一直弹栈并加以计算,直到弹到左括号;
  3. 如果是运算符,则弹栈,直到这个运算符的优先级大于符号栈栈顶的符号的优先级 或是左括号或栈空,然后将运算符进栈; 最后再将栈中残余的符号和结果一直弹到只剩一个结果,这个就是最后的结果。
#include <bits/stdc++.h>
const int M=10007,N=100005;
int n, u[N], v[N], top, k;
char c[N], S[N], ans[2*N];
int main()
{
scanf("%d",&n);
scanf("%s",c);
ans[++k]='.';
for(int i = 0; c[i]; i++)
{
if(c[i] == '(' || c[i] == '*')
S[++top] = c[i];
if(c[i] == '+')
{
while(S[top] == '*')
ans[++k] = S[top--];
S[++top] = c[i];
}
if(c[i] == ')')
{
while(S[top] != '(')
ans[++k] = S[top--];
top--;
}
if(c[i] != '(' && c[i] != ')')
ans[++k]='.';
}
while(top > 0)
ans[++k] = S[top--];
for(int i = 1; i <= k; i++)
{
if(ans[i] == '.')
{
u[++top] = 1;
v[top] = 1;
}
if(ans[i] == '*')
{
top--;
u[top] = (u[top+1]*v[top]+u[top]*v[top+1]+u[top]*u[top+1])%M;
v[top] = v[top]*v[top+1]%M;
}
if(ans[i] == '+')
{
top--;
v[top] = (u[top+1]*v[top]+u[top]*v[top+1]+v[top]*v[top+1])%M;
u[top] = u[top]*u[top+1]%M;
}
}
printf("%d",u[1]);
return 0;
}

  

NOIP2011普及组的更多相关文章

  1. NOIP2011 普及组 T3 洛谷P1309 瑞士轮

    今天题做太少,放道小题凑数233 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公 ...

  2. NOIP2011普及组 数字反转

    题目OJ链接: http://codevs.cn/problem/1130/ https://www.luogu.org/problemnew/show/P1307 2011年NOIP全国联赛普及组 ...

  3. [NOIP2011普及组]瑞士轮 JAVA实现

    题目描述 2*N名编号为1~2N的选手共进行R轮比赛.每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名.选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和.总分 ...

  4. [NOIP2011] 普及组

    数字反转 小模拟 #include<cstdio> #include<iostream> #include<cstring> using namespace std ...

  5. noip2011普及组——统计单词数

    统计单词数 时间限制:1 s 内存限制:128MB [问题描述]一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数.现在,请你编程实 ...

  6. noip2011普及组——数字反转

    数字反转 时间限制:1s 内存限制:128MB[问题描述]给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零 ...

  7. NOIP2011普及组 瑞士环 保序性

    题目链接:http://noi.openjudge.cn/ch0401/4363/ 分析:如果直接模拟,时间复杂度是O(r*nlogn)超时 然后我们发现每次一轮开始时,刚开始是保序的,然后我们可以把 ...

  8. 【单调队列】Vijos P1771 瑞士轮 (NOIP2011普及组第三题)

    题目链接: https://vijos.org/p/1771 题目大意: 给定2N个人(N<=100 000)和其初始分数.能力值(能力两两不同),比赛M次(M<=50),每次PK都是按分 ...

  9. 【解题报告】瑞士轮(NOIP2011普及组T3)

    [题外话:这道题吧……说实话我不太喜欢……因为卡快排.] 题目不贴了,就是给你一个赛制,然后各个选手的初始得分和能力值,问你进行R轮比赛之后第Q名的编号是多少(这个编号读进来就要算OYZ,初始快排的时 ...

  10. NOIP2011普及组 瑞士轮

    OJ地址: https://www.luogu.org/problemnew/show/P1309 http://bailian.openjudge.cn/practice/4031/ 总时间限制:  ...

随机推荐

  1. 怎么在CAD表格中画斜线?CAD表格斜线一分为二绘制步骤

    在Excel表格中经常能看到用一条斜线将单元格一分为二,那么,你知道怎么在CAD表格中画斜线吗?本文小编就以浩辰CAD软件为例来给大家分享一下CAD表格斜线一分为二的绘制步骤,一起来看看吧! CAD表 ...

  2. UE4常用快捷键

    编辑器快捷键 按键 操作 W 选择"移动"工具 E 选择"旋转"工具 R 选择"缩放"工具 F 聚焦对象 End 落到地面 Alt + En ...

  3. 头条二面:宕机后,Redis如何实现快速恢复?

    Redis作为非常火热的内存数据库,其除了具有非常高的性能之外,还需要保证高可用,在故障发生时,尽可能地降低故障带来的影响,Redis也提供了完善的故障恢复机制:哨兵.下面就来具体来看看Redis的故 ...

  4. ABAP 指定字符替换为空格

    上代码 DATA:str1 TYPE string VALUE '小红##爱#six##小绿#666'. *******DATA(str1) = '小红##爱#six##小绿#666'. " ...

  5. fix: because the volume group on the selected device also consist of physical volumes on other devices

    because the volume group on the selected device also consist of physical volumes on other devices 目标 ...

  6. 让你深夜emo的“网抑云”,是如何做产品设计的?

    网易云音乐作为国内首个以"歌单"为核心架构的音乐APP,有的人喜欢它的热评,有的人却觉得它的版权太少,虽然网易云音乐不是曲库最丰富的听歌软件,但绝对是听歌软件里情感体验最好的. 我 ...

  7. Django——全局配置settings详解

    Django设置文件包含你所有的Django安装配置.这个文件一般在你的项目文件夹里.比如我们创建了一个名为mysite的项目,那么这个配置文件setting.py就在项目里的mysite文件夹里. ...

  8. 7. C语言科学计数法表示int

    c语言10的n次方写用e表示: 比如int a=10e2 表示10*10的2次方=1000: 注意:10e6, 代表10*10^6 不代表10^6. 10^6为1^6

  9. 1238. 循环码排列 (Medium)

    问题描述 1238. 循环码排列 (Medium) 给你两个整数 n 和 start.你的任务是返回任意 (0,1,2,,...,2^n-1) 的排列 p,并且满足: p[0] = start p[i ...

  10. 12个有用的JavaScript数组技巧

    数组是Javascript最常见的概念之一,它为我们提供了处理数据的许多可能性,熟悉数组的一些常用操作是很有必要的. 1.数组去重 1.from()叠加new Set()方法 字符串或数值型数组的去重 ...