1001. Add More Zero
Add More Zero
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 2245 Accepted Submission(s): 1053
Nowadays, he is preparing a thought-provoking problem on a specific type of supercomputer which has ability to support calculations of integers between <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> 0 </nobr> and <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> (2m−1) </nobr> (inclusive).
As a young man born with ten fingers, he loves the powers of <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> 10 </nobr> so much, which results in his eccentricity that he always ranges integers he would like to use from <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> 1 </nobr> to <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> 10k </nobr> (inclusive).
For the sake of processing, all integers he would use possibly in this interesting problem ought to be as computable as this supercomputer could.
Given the positive integer <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> m </nobr>, your task is to determine maximum possible integer <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> k </nobr> that is suitable for the specific supercomputer.
1 64
Case #1: 0 Case #2: 19
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
using namespace std;
const double lg=0.30103;
int main(){
int tt=1;
int m;
cout<<log(3)<<endl;
while(~scanf("%d",&m)){
// cout<<m*lg<<endl;
// int res = m*lg;
// printf("Case #%d: %d\n",tt++,res);
}
return 0;
}
1002. Balala Power!
Balala Power!
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 4809 Accepted Submission(s): 387

Talented Mr.Tang has <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> n </nobr> strings consisting of only lower case characters. He wants to charge them with Balala Power (he could change each character ranged from a to z into each number ranged from 0 to 25, but each two different characters should not be changed into the same number) so that he could calculate the sum of these strings as integers in base <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> 26 </nobr> hilariously.
Mr.Tang wants you to maximize the summation. Notice that no string in this problem could have leading zeros except for string "0". It is guaranteed that at least one character does not appear at the beginning of any string.
The summation may be quite large, so you should output it in modulo <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> 109+7 </nobr>.
For each test case, the first line contains one positive integers <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> n </nobr>, the number of strings. <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> (1≤n≤100000) </nobr>
Each of the next <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> n </nobr> lines contains a string <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> si </nobr> consisting of only lower case letters. <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> (1≤|si|≤100000,∑|si|≤106) </nobr>
1 a 2 aa bb 3 a ba abc
Case #1: 25 Case #2: 1323 Case #3: 18221
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define ll long long
using namespace std;
const ll mod=1e9+7;
char s[120000];
int a[27][120000+5]; //第i个字母在第j个位置(26^j)的贡献
int b[27]; //排序数组 对字母的贡献进行排序
int c[27]; //权重数组 记录每个字母最终的贡献权重
ll d[120000]; //每个位的数值的大小 26^d[i]
int e[27]; //记录字母在字符串首是否出现 若未出现过则将其设为0 若都出现则找贡献值最小的那个作为0
void init(){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
memset(e,0,sizeof(e));
memset(s,0,sizeof(s));
}
bool cmp(int x,int y){
for(int i=110000;i>=0;i--){
if(a[x][i]!=a[y][i])
return a[x][i]<a[y][i];
}
return 0;
}
int main(){
d[1]=1;
for(int i=2;i<110000;i++)d[i]=(d[i-1]*26)%mod;
int cnn=1;
int n;
while(~scanf("%d",&n)){
init();
for(int i=0;i<n;i++){
scanf("%s",s);
int len = strlen(s);
for(int j=len-1;j>=0;j--){//统计各个元素在各个位置出现的次数
a[s[j]-'a'][len-j]++;
if(j==0)e[s[j]-'a']=1;
}
}
for(int i=0;i<26;i++){
for(int j=1;j<=110000;j++){
if(a[i][j]>=26){
a[i][j+1]+=a[i][j]/26;
a[i][j]%=26;
}
}
}
for(int i=0;i<26;i++)b[i]=i;
sort(b,b+26,cmp);
if(e[b[0]]==1){
int start =1;
while(e[b[start]]==1&&start<26){
start++;
}
int temp = b[start];
for(int i=start-1;i>=0;i--){
b[i+1]=b[i];
}
b[0]=temp;
}
for(int i=0;i<26;i++)c[b[i]]=i;
long long ans=0;
for(int i=0;i<=26;i++){
for(int j=1;j<=110000;j++){
ans=(ans+c[i]*a[i][j]*d[j])%mod;
}
}
printf("Case #%d: %lld\n",cnn++,ans);
}
return 0;
}
1006. Function(待补)
Function
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1594 Accepted Submission(s): 302
Define that the domain of function <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> f </nobr> is the set of integers from <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> 0 </nobr> to <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> n−1 </nobr>, and the range of it is the set of integers from <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> 0 </nobr> to <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> m−1 </nobr>.
Please calculate the quantity of different functions <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> f </nobr> satisfying that <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> f(i)=bf(ai) </nobr> for each <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> i </nobr> from <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> 0 </nobr> to <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> n−1 </nobr>.
Two functions are different if and only if there exists at least one integer from <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> 0 </nobr> to <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> n−1 </nobr> mapped into different integers in these two functions.
The answer may be too large, so please output it in modulo <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> 109+7 </nobr>.
For each case:
The first line contains two numbers <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> n, </nobr> <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> m </nobr>. <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> (1≤n≤100000,1≤m≤100000) </nobr>
The second line contains <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> n </nobr> numbers, ranged from <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> 0 </nobr> to <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> n−1 </nobr>, the <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> i </nobr>-th number of which represents <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> ai−1 </nobr>.
The third line contains <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> m </nobr> numbers, ranged from <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> 0 </nobr> to <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> m−1 </nobr>, the <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> i </nobr>-th number of which represents <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> bi−1 </nobr>.
It is guaranteed that <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> ∑n≤106, </nobr> <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> ∑m≤106 </nobr>.
3 2 1 0 2 0 1 3 4 2 0 1 0 2 3 1
Case #1: 4 Case #2: 4
考虑置换 <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> a </nobr>的一个循环节,长度为 <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> l </nobr>,那么有
那么 <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> f(i) </nobr> 的值在置换 <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> b </nobr> 中所在的循环节的长度必须为 <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> l </nobr> 的因数。
而如果 <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> f(i) </nobr> 的值确定下来了,这个循环节的另外 <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> l−1 </nobr> 个数的函数值也都确定下来了。
答案就是 <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> ∑ki=1∑j|lij⋅calj </nobr>,其中 <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> k </nobr> 是置换 <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> a </nobr> 中循环节的个数, <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> li </nobr> 表示置换 <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> a </nobr> 中第 <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> i </nobr> 个循环节的长度, <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> calj </nobr> 表示置换 <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> b </nobr> 中长度为 <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> j </nobr> 的循环节的个数。
这道题不会做啊....理解不了题意...f(0) = b[f(a[0])] = b[f(2)]
f[1] = b[f(a[1])] = b[f(0)]
f[2] = b[f(a[2])] = b[f(1)]
其实这道题可以转化为求环的问题,有多少种方式可以构成题目要求的环,即b的环可以有多少种方式画成a的环。
1011. KazaQ's Socks
KazaQ's Socks
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 2375 Accepted Submission(s): 1074
At the beginning, he has <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> n </nobr> pairs of socks numbered from <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> 1 </nobr> to <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> n </nobr> in his closets.
Every morning, he puts on a pair of socks which has the smallest number in the closets.
Every evening, he puts this pair of socks in the basket. If there are <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> n−1 </nobr> pairs of socks in the basket now, lazy KazaQ has to wash them. These socks will be put in the closets again in tomorrow evening.
KazaQ would like to know which pair of socks he should wear on the <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> k </nobr>-th day.
For each case, there is a line contains two numbers <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> n,k </nobr> <nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; min-width:0px; min-height:0px; vertical-align:0px; line-height:normal"> (2≤n≤109,1≤k≤1018) </nobr>.
3 7 3 6 4 9
Case #1: 3 Case #2: 1 Case #3: 2
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
long long n,k;
int t = 1;
while(scanf("%lld %lld",&n,&k)!=EOF)
{
if(k <= n)
{
printf("Case #%d: %lld\n",t,k);
t++;
}
else
{
long long temp = (k-n)% (n-1);
long long shang = (k-n) / (n-1);
if(temp == 0)
{
if(shang % 2 == 0)
printf("Case #%d: %lld\n",t,n);
else
printf("Case #%d: %lld\n",t,n-1);
t++;
}
else
{
printf("Case #%d: %lld\n",t,temp);
t++;
}
}
}
return 0;
}