NOIP2011普及组
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 用一个栈记录下来即可。
然后按以下方法计算:
- 如果是左括号,就直接进栈;
- 如果是右括号,就一直弹栈并加以计算,直到弹到左括号;
- 如果是运算符,则弹栈,直到这个运算符的优先级大于符号栈栈顶的符号的优先级 或是左括号或栈空,然后将运算符进栈; 最后再将栈中残余的符号和结果一直弹到只剩一个结果,这个就是最后的结果。
#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普及组的更多相关文章
- NOIP2011 普及组 T3 洛谷P1309 瑞士轮
今天题做太少,放道小题凑数233 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公 ...
- NOIP2011普及组 数字反转
题目OJ链接: http://codevs.cn/problem/1130/ https://www.luogu.org/problemnew/show/P1307 2011年NOIP全国联赛普及组 ...
- [NOIP2011普及组]瑞士轮 JAVA实现
题目描述 2*N名编号为1~2N的选手共进行R轮比赛.每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名.选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和.总分 ...
- [NOIP2011] 普及组
数字反转 小模拟 #include<cstdio> #include<iostream> #include<cstring> using namespace std ...
- noip2011普及组——统计单词数
统计单词数 时间限制:1 s 内存限制:128MB [问题描述]一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数.现在,请你编程实 ...
- noip2011普及组——数字反转
数字反转 时间限制:1s 内存限制:128MB[问题描述]给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零 ...
- NOIP2011普及组 瑞士环 保序性
题目链接:http://noi.openjudge.cn/ch0401/4363/ 分析:如果直接模拟,时间复杂度是O(r*nlogn)超时 然后我们发现每次一轮开始时,刚开始是保序的,然后我们可以把 ...
- 【单调队列】Vijos P1771 瑞士轮 (NOIP2011普及组第三题)
题目链接: https://vijos.org/p/1771 题目大意: 给定2N个人(N<=100 000)和其初始分数.能力值(能力两两不同),比赛M次(M<=50),每次PK都是按分 ...
- 【解题报告】瑞士轮(NOIP2011普及组T3)
[题外话:这道题吧……说实话我不太喜欢……因为卡快排.] 题目不贴了,就是给你一个赛制,然后各个选手的初始得分和能力值,问你进行R轮比赛之后第Q名的编号是多少(这个编号读进来就要算OYZ,初始快排的时 ...
- NOIP2011普及组 瑞士轮
OJ地址: https://www.luogu.org/problemnew/show/P1309 http://bailian.openjudge.cn/practice/4031/ 总时间限制: ...
随机推荐
- MYSQL-数据操作DDL,DML,DCL,DQL
前言:MYSQL数据操作语言分为四种 1.DDL(数据定义语言):用来创建数据库中的表.索引.视图.存储过程.触发器等. 2.DML(数据操作语言):用来对表内数据的添加.更新.删除等. 3.DCL( ...
- form 表单中input 使用disable属性
记录一下今天踩得坑. 在使用form表单提交的时候,input用了disable属性,在查找了好久之后,找到原因,万万没想到是因为disable. 修改方法:disable改为readonly dis ...
- C++并发编程实战(第2版)
这本书翻译的烂,写的也不好. 甚至不如看cppreference. 这本书英文叫C++ Concurrency in Action, Second Edition 英文原版也是垃圾,C++实在没有写得 ...
- jar打包exe选型
网上一搜有篇文章写了9中不同工具方法,最后使用launch4j,其实就一点开源免费. launch4j>bsd3协议(可免费商用),像exe4j需要license. 经过摸索终于搞定一键启动并且 ...
- laravel常用集合的使用
创建集合: //数组1 $connection = collect([ ['name'=>'jack','age'=>'18','email'=>'ceshi@qq.com'], [ ...
- Dynamics 365 CRM 弹窗 打开自定义页面 Xrm.Navigation.navigateTo Open Web Resource
在CRM中经常需要打开自定义的HTML界面,而且打开这个界面的时候需要模态窗体,阻止用户填写除了弹窗之外的东西,只能先填写窗体的内容: 这个时候很多人喜欢选择第三方的library去实现模态窗体,但是 ...
- encodeURI和encodeURIComponent
encodeURI和encodeURIComponent的作用对象都是URL,唯一的区别就是编码的字符范围: encodeURI不会对ascii字母.数字.~!@#$&*()=:/,;?+' ...
- php 动态实例化某个类
$name = 'test'; $controller = 'test'; $a = '\\addons\\'.$name.'\\model\\'.$controller; $this->mod ...
- antd Vue--this.$confirm弹窗使用
看API中this.$confirm弹窗使用不对 讲的也不明确,在此记录下正确的用法 this.$confirm("确认删除文件?",{ type:'error'}).then(( ...
- iOS开发之定时器和tableview滑动阻塞问题
NSTimer *timer = [[NSTimer alloc]initWithFireDate:[NSDate distantPast] interval:1 target:self select ...