A. Right-Left Cipher
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Polycarp loves ciphers. He has invented his own cipher called Right-Left.

Right-Left cipher is used for strings. To encrypt the string s=s1s2…sn Polycarp uses the following algorithm:

  • he writes down s1,
  • he appends the current word with s2 to the right of the current result),
  • he prepends the current word with s3 to the left of the current result),
  • he appends the current word with s4 to the right of the current result),
  • he prepends the current word with s5 to the left of the current result),
  • and so on for each position until the end of s.

For example, if 

Given string s.

Input

The only line of the input contains 50, inclusive.

Output

Print such string t.

Examples
input
ncteho
output
techno
input
erfdcoeocs
output
codeforces
input
z
output
z
我好菜啊...脑袋都锈住了!
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdlib>
 4 #include <cstring>
 5 
 6 using namespace std;
 7 
 8 int main(){
 9     string str{"0"};
10     string out{"0"};
11     //memset(s,'\0',sizeof(s));
12     //memset(out,'\0',sizeof(out));
13     while(cin>>str){
14         int len=str.size();
15         out=str;
16         if(len==1 || len==2){
17             cout<<str<<endl;
18             continue;
19         }
20         int tmp=0;
21         int len_right=0;
22         int len_left=0;
23         if(len%2==1){
24             tmp=(len-1)/2;
25         }else{
26             tmp=len/2-1;
27         }
28         out[0]=str[tmp];
29         out[1]=str[tmp+1];
30         for(int i=tmp+2,j=3;i<len;i++,j++,j++){
31             out[j]=str[i];
32         }
33         for(int i=tmp-1,j=2;i>=0;i--,j++,j++){
34             out[j]=str[i];
35         }
36         cout<<out<<endl;
37         //memset(str,'\0',sizeof(str));
38         //memset(out,'\0',sizeof(out));
39 
40 
41     }
42 
43 
44 
45 
46     return 0;
47 }
View Code
B. Div Times Mod
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Vasya likes to solve equations. Today he wants to solve x. Can you help him?

Input

The first line contains two integers 2≤k≤1000).

Output

Print a single integer (x div k)⋅(xmodk)=n. It is guaranteed that this equation has at least one positive integer solution.

Examples
input
6 3
output
11
input
1 2
output
3
input
4 6
output
10
Note

The result of integer division b.

In the first sample, 11 is the smallest one.

思路:让找一个最小的x,使得(x/k)*(x%k)==n,如果对x暴力枚举肯定会超时啊,所以可以从x%k这里下手,x%k的值一定>=0 且<k,又因为n不可能为0,所以x%k是大于0的.所以在1~(k-1)之间枚举k.

再设x%k=i,上式可以变成(x-i)/k * i =n,所以x=n/i * k +i.

#include <bits/stdc++.h>
using namespace std;
using LL = long long;

int main(){
    LL n,k;
    while(cin>>n>>k){
        LL x(LONG_MAX);
        for(LL i=1;i<k;i++){
            if(n%i!=0) continue;
            LL tmp=n/i*k+i;
            x=(x<tmp?x:tmp);
        }
        cout<<x<<endl;
    }    
    return 0;
}
View Code


相关文章: