Reverse Rot: Difference between revisions

From programming_contest
Jump to navigation Jump to search
imported>Ww109
No edit summary
imported>Ww109
Line 6: Line 6:


== Code ==  
== Code ==  
<syntaxhighlight line lang="cpp">
<syntaxhighlight line lang="java">
/*
import java.util.*;
* =====================================================================================
public class Reverse_Rot {
* Filename: MCPC2013-C.cpp
* Description: Missing Pages
* Compiler: g++
* =====================================================================================
*/


#include <iostream>
public static void encrypt(String s, int k){
#include <set>
for(int i = s.length()-1; i>=0; i--){
char c = s.charAt(i);
if(c == 95) c = 91;
if(c == 46) c = 92;
c = (char)(c + k);
c = (char)((c - 'A') % 28 + 'A');
if(c == 91) c = 95;
if(c == 92) c = 46;
System.out.print(c);
}
System.out.println();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
int k = scan.nextInt();
if(k == 0)
break;
String s = scan.next();
encrypt(s,k);
}


using namespace std;
}


int main () {
    int N;
    cin >> N;
    while (N) {
        int P;
        cin >> P;
        set<int> ps;
        if (!(P % 2)) {
            ps.insert(P - 1);
            ps.insert(N - P + 1);
            ps.insert(N - P + 2);
        } else {
            ps.insert(P + 1);
            ps.insert(N - P);
            ps.insert(N - P + 1);
        }
        for (set<int>::iterator i = ps.begin(); i != ps.end(); i++) {
            if (i != ps.begin()) cout << " ";
            cout << *i;
        }
        cout << endl;
        cin >> N;
    }
    return 0;
}
}
</syntaxhighlight>
</syntaxhighlight>

Revision as of 17:40, 5 December 2015

Original Description

Idea

Use the symmetry of the structure: the first two pages are bundled with the last two and so on.

Given an odd P, the other three pages are P + 1, N - P and N - P + 1. For an even P, the other three pages are P - 1, N - P + 1 and N - P + 2.

Code

import java.util.*;
public class Reverse_Rot {

	public static void encrypt(String s, int k){
		for(int i = s.length()-1; i>=0; i--){
			char c = s.charAt(i);
			if(c == 95) c = 91;
			if(c == 46) c = 92;
			c = (char)(c + k);
			c = (char)((c - 'A') % 28 + 'A');
			if(c == 91) c = 95;
			if(c == 92) c = 46;
			System.out.print(c);
		}
		System.out.println();
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);
		while(scan.hasNext()){
			int k = scan.nextInt();
			if(k == 0)
				break;
			String s = scan.next();
			encrypt(s,k);
		}

	}

}