A. デジタルカウンター
テストごとの制限時間
1 秒
テストごとのメモリ制限
256 メガバイト入力
標準入力
出力
標準出力
マレックが住んでいます0 から 99 までの番号が付けられた 100 階建てのアパートメントです。このアパートメントにはエレベーターがあり、そのエレベーターが現在いる階を示すデジタル カウンターが付いています。エレベーターは7本のライトスティックで数字の各桁を点灯または消灯して表示します。下の写真は、エレベーターが各桁をどのように表示しているかを示しています。
ある日、マレックがエレベーターを使って 88 階から 0 階に行こうとしたとき、カウンターに 88 ではなく 89 という数字が表示されていることに気づきました。その後、エレベーターが数字を動かし始めたとき、カウンターは 87 に変わりました。少し考えた後、マレックは、これには 1 つの説明しかないという結論に達しました。カウンターのスティックの 1 つが壊れたということです。その日遅く、マレックは壊れた棒について考えていて、突然次の問題を思いつきました。
デジタルカウンターが番号 n を示しているとします。 Malek は、デジタル カウンターが x を表示するはずだったが、いくつかの (おそらく何もない) 壊れたスティックのせいで、代わりに n を表示している可能性がある場合に、整数 x (0?≤?x?≤?99) を呼び出します。 Malek は、特定の n に対して適切な整数の数を知りたいと考えています。したがって、この数値を計算するプログラムを作成する必要があります。カウンタには常に 2 桁が表示されることに注意してください。
入力
入力の唯一の行には、数値 n (0?≤?n?≤?99) を表す正確に 2 桁が含まれています。 n には先行ゼロがある場合があることに注意してください。
出力
出力の唯一の行に、適切な整数の数を出力します。
サンプル テスト
入力
89
出力
入力
00
出力
入力
73
出力
15
注意
最初のサンプルでは、カウンターは 88 または 89 を示すはずです。 2 番目のサンプルでは、適切な整数は 00、08、80、および 88 です。
3 番目のサンプルでは、適切な整数は 03、?08、?09、?33、?38、?39、?73、?78、?79 です。 ,?83,?88,?89,?93,?98,?99.
#include <iostream>#include <stdio.h>#include <string>#include <cstring>#include <algorithm>#include <cmath>#define N 1000#define ll __int64using namespace std;int vis[20]={2,7,2,3,3,4,2,5,1,2};//电梯数字显示出现不同程度损坏,可能有一个或几个stick熄灭,算出每个数字存在的情况
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">int main()</span>
{ int n; while(~scanf("%d",&n)) { int ans=1; int a=n%10; int b=n/10; ans*=vis[a]; ans*=vis[b]; cout<<ans<<endl; } return 0;}
B. モジュラー方程式
テストごとの制限時間
1 秒
テストごとのメモリ制限 256 メガバイト
入力 標準入力
出力 標準出力
先週、ハメドは数学の授業でモジュラー方程式と呼ばれる新しいタイプの方程式について学びました。 i を j で割った余りとして i を法として定義し、それを で表します。 Hamed の教師が説明したように、モジュラー方程式は、a と b が 2 つの非負の整数で、x が変数である形式の方程式です。私たちは方程式の解を正の整数 x と呼びます。
ハメドは映画を見ていたので授業にあまり注意を払わなかった。彼はこれらの方程式の定義を理解することしかできませんでした。
今、彼は数学の練習問題を書きたいと考えていますが、その方法がわからないので、あなたに助けを求めました。彼はモジュラー方程式について知っているすべてをあなたに話し、2 つの数値 a と b を与えてモジュラー方程式の答えの数を決定するプログラムを書くように頼みました。
入力
入力の唯一の行に 2 つのスペース-区切られた整数 a と b (0?≤?a,?b?≤?109) が与えられます。
出力
方程式の答えが無限にある場合は、「infinity」と出力します (引用符なし)。 。それ以外の場合は、モジュラー方程式の解の数を出力します。
サンプル テスト
入力
21 5
出力
Input
9435152 272
Output
282
Input
10 10
Output
infinity
Note
In the first sample the answers of the Modular Equation are 8 and 16 since
#include <iostream>#include <stdio.h>#include <string>#include <cstring>#include <algorithm>#include <cmath>#define N 10000009#define ll __int64using namespace std;//a=b+kx;因为数据比较大10^9,所有不能直接暴力,稍微转化一下
int main(){ ll a,b; while(~scanf("%I64d%I64d",&a,&b)) { ll c=a-b; if(a==b) { printf("infinity\n"); continue; } if(a<b) { printf("0\n"); continue; } ll ans=0; for(int i=1;i*i<=c;i++) { if(c%i==0) { if(i>b) { ans++; } if( i*i<c && (c/i>b) ) ans++; } } cout<<ans<<endl; } return 0;}
C. Treasure
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Malek has recently found a treasure map. While he was looking for a treasure he found a locked door. There was a string s written on the door consisting of characters '(', ')' and '#'. Below there was a manual on how to open the door. After spending a long time Malek managed to decode the manual and found out that the goal is to replace each '#' with one or more ')' characters so that the final string becomes beautiful.
Below there was also written that a string is called beautiful if for each i (1?≤?i?≤?|s|) there are no more ')' characters than '(' characters among the first i characters of s and also the total number of '(' characters is equal to the total number of ')' characters.
Help Malek open the door by telling him for each '#' character how many ')' characters he must replace it with.
Input
The first line of the input contains a string s (1?≤?|s|?≤?105). Each character of this string is one of the characters '(', ')' or '#'. It is guaranteed that s contains at least one '#' character.
Output
If there is no way of replacing '#' characters which leads to a beautiful string print ?-?1. Otherwise for each character '#' print a separate line containing a positive integer, the number of ')' characters this character must be replaced with.
If there are several possible answers, you may output any of them.
Sample test(s)
Input
(((#)((#)
Output
12
Input
()((#((#(#()
Output
221
Input
Output
-1
Input
(#)
Output
-1
Note
|s| denotes the length of the string s.
#include <stdio.h>#include <string>#include <cstring>#include <algorithm>#include <iostream>#include <vector>#define N 100009using namespace std;char str[N];vector<int> t;int main(){ while(~scanf("%s",str)) { int a=0,b=0,c=0; int num=0; int len=strlen(str); for(int i=0;i<len;i++) { if(str[i]=='(') a++; else if(str[i]==')') b++; else if(str[i]=='#') c++; } int f=1; for(int i=0;i<len;i++) { if(str[i]=='#') { if(c==1) { if(a<=b)// ‘)’个数大于或等于‘(’时,还存在‘#’ { f=0; break; } t.push_back(a-b); num-=(a-b); c--; } else { t.push_back(1); num--; b++; c--; } } else if(str[i]=='(') num++; else if(str[i]==')') num--; if(num<0)//在 # 结束之前出现未匹配')’个数大于‘(’的情况 { f=0; break; } } if(num<0 ||f==0)//中途被标记或者 最后 # 结束之后存在 cout<<-1<<endl; else { for(int i=0;i<t.size();i++) cout<<t[i]<<endl; } } return 0;}