CodeForcesDiv2第111专场C题
2012-03-07 16:14
288 查看
此题题意是给你n个数以及一个k,两两总共有n2 种组合,(p1,q1)<(p2,q2)当p1<p1或者p1=p2,q1<q2两种情况时,如果把所有组合都列出来求出第k个组合,那么肯定超时。所以另觅他径,把n的数排序,考虑相等的情况,比如1 1 1 2 2 5,i = 1,j = 4时,a[i]!=a[j] 此时判断k是否在(i-1)*n和(j-1)*n之间,如果不在,则i=j,否则p1=a[i],p2=a[(k-(i-1)*n)/(j-i)+1],此处3个1有9种组合。
注意(i-1)*n,(j-1)*n的值会超出int范围,有2中做法解决:1.把表达式中的n强制转换成(__int64)类型;2.在输入n值的时候直接申明n的类型为__int64。一个表达式如果左右两边的类型不匹配的时候,类型小的会强制转换成类型大的。
代码如下:
------->froest
注意(i-1)*n,(j-1)*n的值会超出int范围,有2中做法解决:1.把表达式中的n强制转换成(__int64)类型;2.在输入n值的时候直接申明n的类型为__int64。一个表达式如果左右两边的类型不匹配的时候,类型小的会强制转换成类型大的。
代码如下:
#include <iostream> #include <algorithm> #include <string> #include <map> #include <queue> #include <set> #include <fstream> #include <utility> #include <iomanip> #include <stack> #include <list> #include <vector> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <ctime> #include <ctype.h> #include <limits.h> using namespace std; int cmp1(const void* a,const void* b){ return (*(int*)a)-(*(int*)b); } int main() { freopen("F://学习//算法//codeblock//11//in111.txt","r",stdin); //freopen("F://学习//算法//codeblock//11//in.txt","w",stdout); int n; __int64 k; int a[100005]; scanf("%d%I64d",&n,&k); //memset(a,0,sizeof(a)); int i,j; for(i=1;i<=n;i++){ scanf("%d",&a[i]); } qsort(a+1,n,sizeof(a[0]),cmp1); j=1; for(i=1;i<=n;){ while(j<=n&&a[i]==a[j]){ j++; }; //i-1在运算前会转换成n的类型,如果n是int,那么乘积可能溢出,导致随机数,所以应该先把n强制转换成__int64类型 //或者在定义n的时候用__int64 类型接收 if(k>(__int64)(i-1)*n&&k<=(__int64)(j-1)*n){ printf("%d %d\n",a[i],a[(k-(__int64)(i-1)*n-1)/(j-i)+1]); } i=j; } return 0; }
------->froest
相关文章推荐
- 【codeforces】Codeforces Round #280 (Div. 2) 水题专场
- Codeforces 238 div2 A. Gravity Flip
- codeforces 354 div2 C Vasya and String 前缀和
- codeforces 294 div2.C
- codeforces 782B Round #403 Div. 2B
- 【codeforces】Codeforces Round #274 (Div. 2)
- codeforces 126 div2
- Codeforces - AIM Tech Round (Div. 2)C - Graph and String
- Codeforces-127-div2
- Codeforces 583 DIV2 Robot's Task 贪心
- AIM Tech Round 3 (Div. 2) (B C D E) (codeforces 709B 709C 709D 709E)
- 【Codeforces Round #368 (Div. 2)】Codeforces 707A Brain's Photos
- Codeforces 242(DIV 2) B题
- 【codeforces】Round #316 (Div. 2)
- Codeforces Div2 244AB
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) Problem D (Codeforces 828D) - 贪心
- [Codeforces] Round #249 (Div. 2)解题报告(ABC)
- 第二十二次codeforces竞技结束 #278 Div 2
- Codeforces (441B) Round #252 (Div. 2) B题
- codeforces 789 div2 题解