您的位置:首页 > 大数据 > 人工智能

2017 Multi-University Training Contest - Team 1

2017-07-30 17:05 323 查看
1001:Add More Zero
题目大意:求满足10^k<=2^m的最大的K。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;

int main()
{
int m,cas=0;
while(~scanf("%d",&m))
{
printf("Case #%d: %d\n",++cas,(int)(m*log(2)/log(10)));
}
return 0;
}


1002:Balala Power!
题目大意:将若干只包含小写字母的字符串转换成26进制的数,输出这些字符串转换之后和最大的十进制数。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
#define ll long long

const int maxn=1e5+10;
const int mod=1e9+7;

struct node
{
int num[maxn];
int id;
bool operator<(const node &r)const
{
for(int i=100000; i>=0; i--)
{
if(num[i]!=r.num[i]) return num[i]>r.num[i];
}
return 0;
}
} a[28];

bool vis[28];
ll num[28],res[maxn];
string s[maxn];

int main()
{
int n,cas=0;
res[0]=1;
for(int i=1; i<maxn; i++)
{
res[i]=res[i-1]*26;
res[i]%=mod;
}
while(~scanf("%d",&n))
{
for(int i=0;i<26;i++)
{
for(int j=0;j<=100000;j++)
a[i].num[j]=0;
a[i].id=i;
vis[i]=0;
}
for(int i=0; i<n; i++)
{
cin>>s[i];
int l=s[i].size();
for(int j=0,k=l-1; j<l; j++,k--)
{
int t=s[i][k]-'a';
a[t].num[j]++;
}
if(l>1) vis[s[i][0]-'a']=1;
}
for(int i=0;i<26;i++)
{
for(int j=0;j<100000;j++)
{
a[i].num[j+1]+=a[i].num[j]/26;
a[i].num[j]%26;
}
}
sort(a,a+26);
for(int i=25;i>=0;i--) num[a[25-i].id]=i;
int t=25;
while(vis[a[t].id]&&t)
{
swap(num[a[t].id],num[a[t-1].id]);
t--;
}
ll ans=0;
for(int i=0;i<n;i++)
{
int l=s[i].size();
for(int j=0;j<l;j++)
{
ans=(ans+num[s[i][j]-'a']*res[l-1-j]%mod)%mod;
}
}
printf("Case #%d: %d\n",++cas,ans);
}
return 0;
}


1008:Hints of sd0061
题目大意:用参数以及所给出函数生成n个数,然后,求排好序后的 n个数中,m 次查询,第 i 的数的值
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int maxn=1e7+10;
int a[110],id[110];
unsigned s[maxn];
unsigned ans[110];
int n,m;
unsigned x,y,z;
unsigned func()
{
unsigned t;
x ^= x << 16;
x ^= x >> 5;
x ^= x << 1;
t = x;
x = y;
y = z;
z = t ^ x ^ y;
return z;
}

bool cmp(int x,int y)
{
return a[x]<a[y];
}

int main()
{
int cas=0;
while(~scanf("%d%d%d%d%d",&n,&m,&x,&y,&z))
{
for(int i=0;i<m;i++) scanf("%d",&a[i]),id[i]=i;
a[m]=n,id[m]=m;
for(int i=0;i<n;i++) s[i]=func();
sort(id,id+m,cmp);
for(int now,i=m-1,last=a[id[m]];i>=0;i--,last=now)
{
now=a[id[i]];
if(now==last) ans[id[i]]=s[now];
else
{
nth_element(s,s+now,s+last);
ans[id[i]]=s[now];
}
}
printf("Case #%d:",++cas);
for(int i=0;i<m;i++) printf(" %u",ans[i]);
printf("\n");
}
return 0;
}


1011:KazaQ's Socks
题目大意:KazaQ有n双袜子,标号1到n放在柜子里,每天早上起床穿袜子选标号最小的一双。然后晚上回来将穿过的扔到篮子里。当篮子里的袜子数量为n-1的时候,就把这些袜子洗一下,第二天晚上再放回柜子里。问KazaQ在第K天穿的是哪一个标号的袜子。
#include<iostream>
#include<cstdio>
using namespace std;
#define ll long long

int main()
{
int n,cas=0;
ll k;
while(~scanf("%d%lld",&n,&k))
{
printf("Case #%d: ",++cas);
if(k<=n) printf("%lld\n",k);
else
{
k-=n;
int t=k/(n-1);
if(k%(n-1)==0)
{
if(t&1) printf("%d\n",n-1);
else printf("%d\n",n);
}
else printf("%lld\n",k%(n-1));
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐