CHETING
THE NEW GUIDE OF
CHEATING IN INFORMATICS OLYMPIAD
By Crazily
//题目资料来自2008~2017年noip普及组
目录:
- 最简化骗分;
2. 最朴实的算法——暴力
3.
- 最简化骗分
①这个不难猜到:
输出样例也是各位常用的方发
所以这个本蒟蒻就不一一列举了;
(一切才刚刚开始)
②少部分题目科可行
不难发现有许多的题目是有一些可预测答案的
举个例子:
P1078 文化之旅
题目背景
本题是错题,后来被证明没有靠谱的多项式复杂度的做法。测试数据非常的水,各种玄学做法都可以通过(比如反着扫),不代表算法正确。因此本题题目和数据仅供参考。
题目描述
有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家)。不同的国家可能有相同的文化。不同文化的国家对其他文化的看法不同,有些文化会排斥外来文化(即如果他学习了某种文化,则他不能到达排斥这种文化的其他国家)。
现给定各个国家间的地理关系,各个国家的文化,每种文化对其他文化的看法,以及这位使者游历的起点和终点(在起点和终点也会学习当地的文化),国家间的道路距离,试求从起点到终点最少需走多少路。
输入输出格式
输入格式:
第一行为五个整数 N,K,M,S,TN,K,M,S,T,每两个整数之间用一个空格隔开,依次代表国家个数(国家编号为11到 NN),文化种数(文化编号为11到KK),道路的条数,以及起点和终点的编号(保证 SS 不等于TT);
第二行为NN个整数,每两个整数之间用一个空格隔开,其中第 ii个数C_iCi,表示国家ii的文化为C_iCi。
接下来的 KK行,每行KK个整数,每两个整数之间用一个空格隔开,记第ii 行的第 j 个数为a_{ij}aij,a_{ij}= 1aij=1 表示文化 ii排斥外来文化jj(ii 等于jj时表示排斥相同文化的外来人),a_{ij}= 0aij=0 表示不排斥(注意ii 排斥 jj 并不保证jj一定也排斥ii)。
接下来的 MM 行,每行三个整数 u,v,du,v,d,每两个整数之间用一个空格隔开,表示国家 uu与国家 vv有一条距离为dd的可双向通行的道路(保证uu不等于 vv,两个国家之间可能有多条道路)。
输出格式:
一个整数,表示使者从起点国家到达终点国家最少需要走的距离数(如果无解则输出-1−1)。
输入样例#1: 复制
2 2 1 1 2
1 2
0 1
1 0
1 2 10
输出样例#1: 复制
-1
输入样例#2: 复制
2 2 1 1 2
1 2
0 1
0 0
1 2 10
输出样例#2: 复制
10
说明
输入输出样例说明11
由于到国家 22 必须要经过国家11,而国家22的文明却排斥国家 11 的文明,所以不可能到达国家 22。
输入输出样例说明22
路线为11 ->22
【数据范围】
对于 100%的数据,有2≤N≤1002≤N≤100
1≤K≤1001≤K≤100
1≤M≤N^21≤M≤N2
1≤k_i≤K1≤ki≤K
1≤u, v≤N1≤u,v≤N
1≤d≤1000,S≠T,1≤S,T≤N1≤d≤1000,S≠T,1≤S,T≤N
这题想大家一定都见过2012年普及第四题,想必大家也为此题呕心沥血过吧
题干长,数据多,一看就是一种厌烦直上心头。。。。
我做这题是也看了不少题解,最终用时2小时用广搜解决了
可大家知道总时间才3个半小时。。。
所以考试时候应该仔细观察题目:发现了题目中有(若无解就输出-1)
于是。。。
Printf(“-1”);
28分
#1WA
#2WA
#3WA
#4WA
#5WA
#6WA
#7WA
#8WA
#9WA
#10AC3ms/648KB
#11AC2ms/668KB
#12AC3ms/656KB
非常合算
用时:1分钟 得分:28
//其实这样的题目还是挺多比如ISBN号码(不过这道很水(入门),没必要骗)
2. 最朴实的算法——暴力
前言:暴力是一门学问
①朴实翻译
栗子:
P1309 瑞士轮
题目背景
在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。
本题中介绍的瑞士轮赛制,因最早使用于18951895年在瑞士举办的国际象棋比赛而得名。它可以看作是淘汰赛与循环赛的折中,既保证了比赛的稳定性,又能使赛程不至于过长。
题目描述
2 \times N2×N 名编号为 1-2N1−2N 的选手共进行R 轮比赛。每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名。选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和。总分相同的,约定编号较小的选手排名靠前。
每轮比赛的对阵安排与该轮比赛开始前的排名有关:第11 名和第22 名、第 33 名和第 44名、……、第2K - 12K−1名和第2K2K名、…… 、第2N - 12N−1名和第2N2N名,各进行一场比赛。每场比赛胜者得11分,负者得 00分。也就是说除了首轮以外,其它轮比赛的安排均不能事先确定,而是要取决于选手在之前比赛中的表现。
现给定每个选手的初始分数及其实力值,试计算在R 轮比赛过后,排名第QQ 的选手编号是多少。我们假设选手的实力值两两不同,且每场比赛中实力值较高的总能获胜。
输入输出格式
输入格式:
第一行是三个正整数N,R ,QN,R,Q,每两个数之间用一个空格隔开,表示有 2 \times N2×N名选手、RR 轮比赛,以及我们关心的名次 QQ。
第二行是2 \times N2×N 个非负整数s_1, s_2, …, s_{2N}s1,s2,…,s2N,每两个数之间用一个空格隔开,其中s_isi表示编号为ii 的选手的初始分数。 第三行是2 \times N2×N 个正整数w_1 , w_2 , …, w_{2N}w1,w2,…,w2N,每两个数之间用一个空格隔开,其中 w_iwi 表示编号为ii 的选手的实力值。
输出格式:
一个整数,即RR 轮比赛结束后,排名第QQ 的选手的编号。
输入输出样例
输入样例#1: 复制
2 4 2
7 6 6 7
10 5 20 15
输出样例#1: 复制
1
说明
【样例解释】
【数据范围】
对于30\%30%的数据,1 ≤ N ≤ 1001≤N≤100;
对于50\%50%的数据,1 ≤ N ≤ 10,0001≤N≤10,000;
对于100\%100%的数据,1 ≤ N ≤ 100,000,1 ≤ R ≤ 50,1 ≤ Q ≤ 2N,0 ≤ s_1, s_2, …, s_{2N}≤10^8,1 ≤w_1, w_2 , …, w_{2N}≤ 10^81≤N≤100,000,1≤R≤50,1≤Q≤2N,0≤s1,s2,…,s2N≤108,1≤w1,w2,…,w2N≤108。
noip2011普及组第3题。
结构体暴力:(STL【sort】,P党跳过)
#include <bits/stdc++.h>
using namespace std;
int n,r,q;
struct node{
int s,w,number;
}a[200001];
int cmp(node x,node y){
return x.s>y.s||(x.s==y.s&&x.number<y.number);
};
int main(){
scanf("%d%d%d",&n,&r,&q);n*=2;
for(int i=1;i<=n;i++)scanf("%d",&a[i].s),a[i].number=i;
for(int i=1;i<=n;i++)scanf("%d",&a[i].w);
sort(a+1,a+1+n,cmp);
for(int i=1;i<=r;i++){
for(int j=1;j<=n;j+=2){
if(a[j].w>a[j+1].w)a[j].s++;
else if(a[j].w<a[j+1].w)a[j+1].s++;
}
sort(a+1,a+1+n,cmp);
}
printf("%d\n",a[q].number);
return 0;
}
用时:10分钟 得分60分
②DFS(深搜)
这是大家最熟的东西,不管怎么样
Dfs【】【】=0;
F();
Dfs【】【】=1;
回溯一上,基本答案是对了(能拿多少是多少)
举个例子:
//未完待续。。。