CSES - Putka Open 2015 – 3/6 - Results
Submission details
Task:Onnenluku
Sender:
Submission time:2015-09-12 22:37:37 +0300
Language:C++
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED19
#2ACCEPTED33
#3ACCEPTED48
Test results
testverdicttimegroup
#1ACCEPTED0.05 s1details
#2ACCEPTED0.06 s1details
#3ACCEPTED0.05 s1details
#4ACCEPTED0.05 s1details
#5ACCEPTED0.05 s1details
#6ACCEPTED0.05 s2details
#7ACCEPTED0.05 s2details
#8ACCEPTED0.05 s2details
#9ACCEPTED0.06 s2details
#10ACCEPTED0.05 s2details
#11ACCEPTED0.04 s3details
#12ACCEPTED0.05 s3details
#13ACCEPTED0.05 s3details
#14ACCEPTED0.05 s3details
#15ACCEPTED0.05 s3details

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:49:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i=0; i<a.size(); ++i) a_[i]=a[i];
                  ^
input/code.cpp:50:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i=0; i<b.size(); ++i) b_[i]=b[i];
                  ^
input/code.cpp:55:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i=0; i<a.size(); ++i) ++az[a[i]-'0'];
                  ^

Code

#include <iostream>
using namespace std;

string a, b;
char a_[55], b_[55];

char az[30];

long long ans;


long long to(char* n, int l, char a, char b){
  if (n[0]=='0' && a) return 0;
  if (l==1){
    if (a && b) return (n[0]>=a?1:0)+(n[0]>=b?1:0);
    if (a && !b && n[0]!='0') return n[0]-'0'-(n[0]>=a?1:0);
    return 0;
  }
  long long rv=0;
  
  if (!a){
    for (int i=2; i<l; ++i)
      rv+=((1L<<i)-2)*9*8/2;
    rv+=((1L<<(l-1))-1)*8*(n[0]-'1');
    a=n[0];
  }else if (!b){
    if (n[0]>a){
      rv=((1L<<(l-1))-1)*8+((1L<<(l-2)))*(n[0]-'2')*2;
    }else{
      rv=((1L<<(l-2)))*(n[0]-'1')*2;      
    }
    if (n[0]!=a) b=n[0];
  }else{
    if (n[0]>a) rv=(1L<<(l-1));
    if (n[0]>b) rv+=(1L<<(l-1));
  }
  if (n[0]==a || n[0]==b) rv+=to(&(n[1]), l-1, a, b);
  return rv;
}


int main(){
  ios_base::sync_with_stdio(0); cin.tie(0);
  


  cin >> a >> b;
  if (a.size()>b.size()) swap(a, b);
  for (int i=0; i<a.size(); ++i) a_[i]=a[i];
  for (int i=0; i<b.size(); ++i) b_[i]=b[i];
  
  ans=to(b_, b.size(), 0, 0)-to(a_, a.size(), 0, 0);
  
  
  for (int i=0; i<a.size(); ++i) ++az[a[i]-'0'];
  int aza=0;
  for (int i=0; i<30; ++i) if (az[i]) ++aza;
  if (aza==2 && az[0]==0) ++ans;
  
  cout << ans << "\n";
}

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
2157 93337

correct output
1421

user output
1421

Test 2

Group: 1

Verdict: ACCEPTED

input
4875 95124

correct output
1278

user output
1278

Test 3

Group: 1

Verdict: ACCEPTED

input
5577 96352

correct output
1245

user output
1245

Test 4

Group: 1

Verdict: ACCEPTED

input
8362 92950

correct output
1076

user output
1076

Test 5

Group: 1

Verdict: ACCEPTED

input
5658 96660

correct output
1238

user output
1238

Test 6

Group: 2

Verdict: ACCEPTED

input
51312303535233 994542403556353

correct output
1453976

user output
1453976

Test 7

Group: 2

Verdict: ACCEPTED

input
25636920452341 934558290712847

correct output
1544072

user output
1544072

Test 8

Group: 2

Verdict: ACCEPTED

input
7917952071965 985207415843573

correct output
1763176

user output
1763176

Test 9

Group: 2

Verdict: ACCEPTED

input
48991581181227 907034837225965

correct output
1380248

user output
1380248

Test 10

Group: 2

Verdict: ACCEPTED

input
47968703305149 924246001328437

correct output
1396632

user output
1396632

Test 11

Group: 3

Verdict: ACCEPTED

input
292953755324413237753216241025...

correct output
53286731528535944

user output
53286731528535944

Test 12

Group: 3

Verdict: ACCEPTED

input
373990979330820426927419348165...

correct output
51580289482227600

user output
51580289482227600

Test 13

Group: 3

Verdict: ACCEPTED

input
701417326319476057561825658890...

correct output
42924933948374952

user output
42924933948374952

Test 14

Group: 3

Verdict: ACCEPTED

input
177202883511434557056457305647...

correct output
54500592365600640

user output
54500592365600640

Test 15

Group: 3

Verdict: ACCEPTED

input
977665117437419620152569155919...

correct output
38562071809359800

user output
38562071809359800