链接:https://www.nowcoder.com/acm/contest/70/D

题目:
定义一个数字为幸运数字当且仅当它的所有数位都是4或者7。
比如说,47、744、4都是幸运数字而5、17、467都不是。
现在想知道在1...n的第k小的排列中,有多少个幸运数字所在的位置的序号也是幸运数字。

输入描述:

第一行两个整数n,k。
1 <= n,k <= 1000,000,000

输出描述:

一个数字表示答案。
如果n没有k个排列,输出-1。

输入例子:
7 4
输出例子:
1

-->

示例1

输入

7 4

输出

1

说明

1 2 3 4 6 7 5
示例2

输入

4 7

输出

1

说明

2 1 3 4

思路:13以内暴力,13以后的可以保证前面N-13为的排列是1,2....N-13,然后暴力后面13位。

(应该可以统一起来)。

当时由于一些细节问题,wa了很多次。导致最后面那个水题没有搞定。

#include<cmath>
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
const int inf=;
ll p[];int num[],ans;
int vis[],t1,t2,cnt,tot=,N,K;
ll a[],cnt2;
void dfs(ll sum)
{
a[++cnt2]=sum;
if(sum>inf) return ;
dfs(sum*+);
dfs(sum*+);
}
void Work(int n,int m)
{
t2=m-;t1=;
memset(vis,,sizeof(vis));
int k=;
for(int i=;i<=n;i++){
t1=t2/p[n-i];
t2=t2%p[n-i];
cnt=;
for(int j=k;j<=n;j++)
if(!vis[j]){
cnt++;
if(cnt==t1+){
vis[j]=;
num[++tot]=j;
break;
}
}
}
for(int i=;i<=n;i++){
bool Flag1=false,Flag2=false;int pos;
pos=lower_bound(a+,a+cnt2+,num[i])-a;
if(num[i]==a[pos]) Flag1=true;
pos=lower_bound(a+,a+cnt2+,i)-a;
if(i==a[pos]) Flag2=true;
if(Flag1&&Flag2) ans++;
}
}
void Work2(int n,int m)
{
t2=m-;t1=;
memset(vis,,sizeof(vis));
int k=;
for(int i=;i<=n;i++){
t1=t2/p[n-i];
t2=t2%p[n-i];
cnt=;
for(int j=k;j<=n;j++)
if(!vis[j]){
cnt++;
if(cnt==t1+){
vis[j]=;
num[++tot]=j;
break;
}
}
}
//for(int i=1;i<=13;i++) num[i]+=N-13;
//for(int i=1;i<=n;i++) cout<<N-13+i<<" "<<num[i]+N-13<<endl;
for(int i=;i<=;i++){
bool Flag1=false,Flag2=false;int pos;
pos=lower_bound(a+,a+cnt2+,num[i]+N-)-a;
if(num[i]+N-==a[pos]) Flag1=true;
pos=lower_bound(a+,a+cnt2+,i+N-)-a;
if(i+N-==a[pos]) Flag2=true;
if(Flag1&&Flag2) ans++;
}
}
int main()
{
dfs();
sort(a+,a+cnt2+);
p[]=; p[]=; for(int i=;i<=;i++) p[i]=p[i-]*i;
scanf("%d%d",&N,&K);
if(N<=){
if(K>p[N]) printf("-1\n");
else{
Work(N,K);
printf("%d\n",ans);
}
}
else {
for(int i=;i<=cnt2;i++) if(a[i]<=N-) ans++;
Work2(,K);
printf("%d\n",ans);
}
return ;
}

F题:8个方向分别排序即可,一共10种情况,比赛的时候写到8就没时间了,可能也就两三分钟的事情,GG。

#include<cstdio>
#include<vector>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=;
int ans[maxn+],num[],cnt,M,N;
struct in
{
int x; int y; int op; int id;
in(){}
in(int xx,int yy,int oo,int ii):x(xx),y(yy),op(oo),id(ii){}
};
in xx[maxn+];
vector<in>s[maxn+];
bool cmp1(in a,in b){
return a.op>b.op;
}
bool cmp2(in a,in b){
return a.op<b.op;
}
void solve1()
{
for(int i=;i<=M;i++) s[i].clear();
for(int i=;i<=N;i++) {
s[xx[i].x].push_back(in(xx[i].x,xx[i].y,xx[i].y,xx[i].id));
}
for(int i=;i<=M;i++) {
sort(s[i].begin(),s[i].end(),cmp1);
for(int j=;j<s[i].size();j++){
ans[s[i][j].id]++;
}
}
}
void solve2()
{
for(int i=;i<=M;i++) s[i].clear();
for(int i=;i<=N;i++) {
s[xx[i].x].push_back(in(xx[i].x,xx[i].y,xx[i].y,xx[i].id));
}
for(int i=;i<=M;i++) {
sort(s[i].begin(),s[i].end(),cmp2);
for(int j=;j<s[i].size();j++){
ans[s[i][j].id]++;
}
}
}
void solve3()
{
for(int i=;i<=M;i++) s[i].clear();
for(int i=;i<=N;i++) {
s[xx[i].y].push_back(in(xx[i].x,xx[i].y,xx[i].x,xx[i].id));
}
for(int i=;i<=M;i++) {
sort(s[i].begin(),s[i].end(),cmp1);
for(int j=;j<s[i].size();j++){
ans[s[i][j].id]++;
}
}
}
void solve4()
{
for(int i=;i<=M;i++) s[i].clear();
for(int i=;i<=N;i++) {
s[xx[i].y].push_back(in(xx[i].x,xx[i].y,xx[i].x,xx[i].id));
}
for(int i=;i<=M;i++) {
sort(s[i].begin(),s[i].end(),cmp2);
for(int j=;j<s[i].size();j++){
ans[s[i][j].id]++;
}
}
}
void solve5()
{
for(int i=;i<=M;i++) s[i].clear();
for(int i=;i<=N;i++) {
s[xx[i].y+xx[i].x].push_back(in(xx[i].x,xx[i].y,xx[i].x,xx[i].id));
}
for(int i=;i<=M;i++) {
sort(s[i].begin(),s[i].end(),cmp1);
for(int j=;j<s[i].size();j++){
ans[s[i][j].id]++;
}
}
}
void solve6()
{
for(int i=;i<=M;i++) s[i].clear();
for(int i=;i<=N;i++) {
s[xx[i].y+xx[i].x].push_back(in(xx[i].x,xx[i].y,xx[i].x,xx[i].id));
}
for(int i=;i<=M;i++) {
sort(s[i].begin(),s[i].end(),cmp2);
for(int j=;j<s[i].size();j++){
ans[s[i][j].id]++;
}
}
}
void solve7()
{
for(int i=;i<=M;i++) s[i].clear();
for(int i=;i<=N;i++) {
if(xx[i].y>=xx[i].x) s[xx[i].y-xx[i].x].push_back(in(xx[i].x,xx[i].y,xx[i].x,xx[i].id));
}
for(int i=;i<=M;i++) {
sort(s[i].begin(),s[i].end(),cmp1);
for(int j=;j<s[i].size();j++){
ans[s[i][j].id]++;
}
}
}
void solve8()
{
for(int i=;i<=M;i++) s[i].clear();
for(int i=;i<=N;i++) {
if(xx[i].y>=xx[i].x) s[xx[i].y-xx[i].x].push_back(in(xx[i].x,xx[i].y,xx[i].x,xx[i].id));
}
for(int i=;i<=M;i++) {
sort(s[i].begin(),s[i].end(),cmp2);
for(int j=;j<s[i].size();j++){
ans[s[i][j].id]++;
}
}
}
void solve9()
{
for(int i=;i<=M;i++) s[i].clear();
for(int i=;i<=N;i++) {
if(xx[i].y<xx[i].x) s[xx[i].x-xx[i].y].push_back(in(xx[i].x,xx[i].y,xx[i].x,xx[i].id));
}
for(int i=;i<=M;i++) {
sort(s[i].begin(),s[i].end(),cmp1);
for(int j=;j<s[i].size();j++){
ans[s[i][j].id]++;
}
}
}
void solve10()
{
for(int i=;i<=M;i++) s[i].clear();
for(int i=;i<=N;i++) {
if(xx[i].y<xx[i].x) s[xx[i].x-xx[i].y].push_back(in(xx[i].x,xx[i].y,xx[i].x,xx[i].id));
}
for(int i=;i<=M;i++) {
sort(s[i].begin(),s[i].end(),cmp2);
for(int j=;j<s[i].size();j++){
ans[s[i][j].id]++;
}
}
}
int main()
{
scanf("%d%d",&M,&N);
M=M*+;
for(int i=;i<=N;i++){
xx[i].id=i;
scanf("%d%d",&xx[i].x,&xx[i].y);
}
solve1();
solve2();
solve3();
solve4();
solve5();
solve6();
solve7();
solve8();
solve9();
solve10();
for(int i=;i<=N;i++) num[ans[i]]++;
for(int i=;i<;i++) cout<<num[i]<<" ";
cout<<num[]<<endl;
return ;
}

牛客练习赛13D:幸运数字Ⅳ(康托展开) F:关键字排序的更多相关文章

  1. 牛客练习赛13D 幸运数字4

    题目链接:https://ac.nowcoder.com/acm/contest/70/D 题目大意: 略 分析: 注意到12! < 10^9 < 13!,于是当n > 13时,第k ...

  2. 牛客练习赛13B 幸运数字2

    题目链接:https://ac.nowcoder.com/acm/contest/70/B 题目大意: 略 分析: 先DFS求出所有幸运数,然后暴力即可 代码如下: #pragma GCC optim ...

  3. 牛客练习赛13D

    定义一个数字为幸运数字当且仅当它的所有数位都是4或者7.比如说,47.744.4都是幸运数字而5.17.467都不是.现在想知道在1...n的第k小的排列(permutation,https://en ...

  4. 牛客提高D2t2 幸运数字考试

    分析 预处理出所有合法数字 然后直接lower_bound查询即可 代码 #include<iostream> #include<cstdio> #include<cst ...

  5. 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)

    牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...

  6. 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)

    牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...

  7. 牛客练习赛53 D 德育分博弈政治课 (思维建图,最大流)

    牛客练习赛53 D德育分博弈政治课 链接:https://ac.nowcoder.com/acm/contest/1114/D来源:牛客网 题目描述 德育分学长最近玩起了骰子.他玩的骰子不同,他的骰子 ...

  8. 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D

    目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...

  9. 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B

    牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...

随机推荐

  1. HDU-5532//2015ACM/ICPC亚洲区长春站-重现赛-F - Almost Sorted Array/,哈哈,水一把区域赛的题~~

    F - Almost Sorted Array Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

  2. 《TCP/IP详解卷1:协议》——第6章 ICMP:Internet控制报文协议(转载)

    1.引言 ICMP被认为是IP层的一个组成部分,它传递差错报文以及其他需要注意的信息.ICMP报文通常被IP层或更高层协议(TCP或UDP)使用.一些ICMP报文把差错报文返回给用户进程. ICMP报 ...

  3. Xcode 全局搜索失效的问题

    早上手一快不知点了什么,然后全局搜索的功能就不起作用了.百度了一下才知道,原来把搜索范围给改了,改回来如下:

  4. java HashMap的使用

    java HashMap的使用 import java.util.HashMap; import java.util.Iterator; public class WpsklHashMap { pub ...

  5. Linux 特殊文档说明

    目录 /usr/share/man 目录 /usr/share/doc /etc/passwd 文件 /etc/shadow 文件 /etc/group 文件 /usr/share/man 目录 当我 ...

  6. LINUX 下 ipv6 socket 编程

    大家都知道,随着互联网上主机数量的增多,现有的32位IP地址已经不够用了,所以推出了下一代IP地址IPv6,写网络程序的要稍微改变一下现有的网络程序适应IPv6网络是相当容易的事.对于我们来说就是IP ...

  7. rror Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnec

    在mysql5中,可以设置safe mode,比如在一个更新语句中 UPDATE table_name SET bDeleted=0; 执行时会错误,报: You are using safe upd ...

  8. Spring + RMI

    服务端: RmiServer.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns= ...

  9. C# 9.0新特性

    CandidateFeaturesForCSharp9 看到标题,是不是认为我把标题写错了?是的,C# 8.0还未正式发布,在官网它的最新版本还是Preview 5,通往C#9的漫长道路却已经开始.前 ...

  10. 【Todo】Java线程面试题 Top 50 (转载)

    原文链接:http://www.importnew.com/12773.html 这里有一个排版好看一点的:http://www.cnblogs.com/dolphin0520/p/3958019.h ...