Loi 2015.8.27 TEST 坑题互测

昨日学长曰:明天每人找一道坑题,互坑~~于是乎……………… 一道一道来吧~ T1:Loi_imcy(打死曹远)

题目描述: 我大天朝有一款为各家各户所熟知的游戏——《拳皇》,M作为《拳皇 》的脑残粉,今天又来Loi虐场了! M转念一想,觉得自己是在太厉害了,不能只是干掉对手,那样就显得自己太弱了, 他想要做到能控制自己打完还剩下多少血量。于是他就搞来了各个角色的能力值,对于两个能力值不同的角色,能力值高的肯定会赢啦,赢后会剩下(自己的能力值 – 对手的能力值)的血量, 于是M就想知道有多少对角色在对战后赢得一方会剩下C(保证C不为0)点血量,然而M对于减法很是不擅长,于是就交给了会编程的你。 输入描述: 第一行为两个非负整数N和C,表示有N个角色,要剩C点血量。 第二行有N个数,分别表示1 – N个角色的能力值。 输出描述: 输出一个整数,表示一共有多少对角色符合要求。 样例输入: 4 1 1 1 2 3 样例输出: 3 数据范围: n <= 1000000 , 答案保证在int范围内。 数据纯random , 请随意乱搞。

看完题暴力就能想出来,但是数据范围暴力显然过不去,然后我们想别的办法:既然所有状态枚举量太大,那么我们可不可以只枚举对结果有影响的答案呢?显然是可以的,我们用一个桶来记录一个数字出现的次数,同时记录最大值和最小值,那么我们就可以从最大值开始枚举差值为c,并且左右端点在maxx和minn之间的数,这样枚举量就少了许多。时间复杂度也只是扫一遍而已。

代码如下:

;ll;const int size = 100010;const int INF = 2 << 28;int num[size];ll ans;int maxx = -INF,minn = INF;int main(){freopen(“M.in”,”r”,stdin);freopen(“M.out”,”w”,stdout);int n,k;scanf(“%d%d”,&n,&k);for(int i = 1;i <= n;i ++){int a;scanf(“%d”,&a);num[a] ++;maxx = max(maxx,a);minn = min(minn,a);}for(int i = maxx,j = maxx-k;j >= minn;i–,j–){ans += (ll)(num[i]*num[j]);}printf(“%lld”,ans);return 0;}/*4 11 1 2 3*/

T2:Zzz(打死zzz)

题面是图片格式0.0

题目坑在: 1、一个汉字对应两个空格,不解释………… 2、在devc下是蓝色,什么样的是蓝色?开始很郁闷,后来想了想,双引号或者注释就可以,于是…… 变成了水题 代码…………:

using namespace std;int main(){freopen(“MMM.out”,”w”,stdout);printf(“%c龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘%c\n”,'”‘,'”‘);printf(“%c龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘%c\n”,'”‘,'”‘);printf(“%c龘龘龘 龘龘龘龘龘龘龘龘龘龘龘 龘龘龘龘龘%c\n”,'”‘,'”‘);printf(“%c龘龘龘 龘龘龘龘龘龘 龘龘 龘龘龘龘龘龘龘龘龘龘龘%c\n”,'”‘,'”‘);printf(“%c龘龘龘 龘龘龘龘龘龘 龘龘 龘龘龘龘龘 龘龘龘龘龘%c\n”,'”‘,'”‘);printf(“%c龘龘龘 龘龘龘龘龘龘 龘龘 龘龘龘龘龘 龘龘龘龘龘%c\n”,'”‘,'”‘);printf(“%c龘龘龘 龘龘龘龘龘龘 龘龘 龘龘龘龘龘 龘龘龘龘龘%c\n”,'”‘,'”‘);printf(“%c龘龘龘龘龘龘龘龘龘龘龘龘 龘龘龘龘龘%c\n”,'”‘,'”‘);printf(“%c龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘%c\n”,'”‘,'”‘);printf(“%c龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘%c\n”,'”‘,'”‘);printf(“%c龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘龘%c”,'”‘,'”‘);return 0;}

T3:darkfamles(拼错了不要怪我) 题面:BZOJ2761 这题找了道现成的,BZOJ非权限水题之一,本以为一遍AC,没想到还是有坑=-= PE……………… 可能是平时打习惯了不在意输出格式了没想到真有题卡PE =-= 代码如下:

;map <int,bool> maps;int pre[50010];int main(){int t;scanf(“%d”,&t);for(int i = 1;i <= t;i ++){maps.clear();memset(pre,0,sizeof(pre));int tot = 0;int n;scanf(“%d”,&n);for(int j = 1;j <= n;j ++){int a;scanf(“%d”,&a);if(!maps[a]){maps[a] = 1;pre[++tot] = a;}}printf(“%d”,pre[1]);for(int j = 2;j <= tot;j ++){printf(” %d”,pre[j]);}if(i != t){puts(“”);}}return 0;}/*2111 2 18 3 3 19 2 3 6 5 461 2 3 4 5 6*/快乐时,想想我的影子,我会在云上为你喝彩

Loi 2015.8.27 TEST 坑题互测

相关文章:

你感兴趣的文章:

标签云: