Codeforces Round #265 (Div. 1)

A No to Palindromes!

题意:给一个长度为n的用前m个字符构成的字符串,定义一个字符串是好的当且仅当他的每个子串都不是回文的,现在给出一个好的字符串,求比他字典序大的第一个好的字符串。

题解:从后往前每一位枚举,若把当前枚举的位改成ch后为好的串,只需要判断他和他前面的一个字符是否相同构成长度为2的回文串,或者和他前面的前面的两个字符构成长度为3的回文串。

于是找到第一个可以换的位置,后面每个位置从‘a‘开始枚举可以取得的第一个字符即可。

 1 #include <cstdio>
 2
 3 #include <cmath>
 4
 5 #include <cstring>
 6
 7 #include <iostream>
 8
 9 #include <algorithm>
10
11
12
13 using namespace std;
14
15 char s[2000];
16
17 int n,p;
18
19
20
21 int check(int pos,char ch)
22
23 {
24
25     if (pos>0&&s[pos-1]==ch) return 0;
26
27     if (pos>1&&s[pos-2]==ch) return 0;
28
29     return 1;
30
31 }
32
33 int main()
34
35 {
36
37     scanf("%d %d",&n,&p);
38
39     scanf("%s",s);
40
41     for (int i=n-1;i>=0;--i)
42
43     {
44
45         for (int ch=s[i]+1;ch<‘a‘+p;++ch)
46
47         {
48
49             if (!check(i,ch)) continue;
50
51             s[i]=ch;
52
53             for (int j=i+1;j<n;++j)
54
55                 for (s[j]=‘a‘;!check(j,s[j])&&s[j]<‘a‘+p;++s[j]);
56
57             printf("%s",s);
58
59             return 0;
60
61         }
62
63     }
64
65     printf("NO");
66
67     return 0;
68
69 }

B Restore Cube

题意:给出八个三元组(x,y,z),每个三元组内元素可相互交换,问在交换后有没有可能这八个三元组对应在空间的八个点构成一个正方体。

题解:明显直接枚举所有情况检查是否可行即可,对于检查八个点能否构成一个正方体。。我们可以枚举每个点然后算出其他点到他的距离

如果距离均为x x x 根号二x 根号二x 根号二x 根号三x这样的形式则必为一个正方体。

  1 #include <cstdio>
  2
  3 #include <iostream>
  4
  5 #include <cmath>
  6
  7 #include <cstring>
  8
  9 #include <algorithm>
 10
 11 using namespace std;
 12
 13 typedef long long LL;
 14
 15 LL map[10][5];
 16
 17 LL a[10];
 18
 19
 20
 21 LL dist(int x,int y)
 22
 23 {
 24
 25     return (map[x][1]-map[y][1])*(map[x][1]-map[y][1])+(map[x][2]-map[y][2])*(map[x][2]-map[y][2])+(map[x][3]-map[y][3])*(map[x][3]-map[y][3]);
 26
 27 }
 28
 29 int work(int x)
 30
 31 {
 32
 33     int num=0;
 34
 35     for (int i=1;i<=8;++i)
 36
 37     {
 38
 39         if (i==x) continue;
 40
 41         ++num;a[num]=dist(i,x);
 42
 43     }
 44
 45     sort(a+1,a+1+num);
 46
 47     if (a[1]==0||a[1]!=a[2]||a[1]!=a[3]||a[4]!=a[5]||a[4]!=a[6]||a[4]!=2*a[1]||a[7]!=3*a[1]) return 0;
 48
 49     return 1;
 50
 51 }
 52
 53 int check()
 54
 55 {
 56
 57     for (int i=1;i<=8;++i)    if (!work(i)) return 0;
 58
 59     printf("YES\n");
 60
 61     for (int i=1;i<=8;++i)
 62
 63     {
 64
 65         for (int j=1;j<=3;++j) printf("%I64d ",map[i][j]);
 66
 67         printf("\n");
 68
 69
 70
 71     }
 72
 73     return 1;
 74
 75 }
 76
 77 int dfs(int x)
 78
 79 {
 80
 81     if (x==9) return check();
 82
 83     sort(map[x]+1,map[x]+4);
 84
 85     do
 86
 87     {
 88
 89         if (dfs(x+1)) return 1;;
 90
 91     }while (next_permutation(map[x]+1,map[x]+4));
 92
 93     return 0;
 94
 95 }
 96
 97 int main()
 98
 99 {
100
101     for (int i=1;i<=8;++i)
102
103         for (int j=1;j<=3;++j) scanf("%I64d",&map[i][j]);
104
105     if (!dfs(1)) printf("NO\n");
106
107     return 0;
108
109 }

C Substitutes in Number

题意:给出一个数字,现在给出很多个替换,对于某个替换:要求把从0到9的某个数字全部换成数字T(可为空),求最后变换后的数mod(1e9+7)。

题解:假设我们最后得到了每个数字对应的数,那么我们就可以从初始的数字直接转化到最后的结果。(未完待续)

时间: 2024-10-06 01:10:37

Codeforces Round #265 (Div. 1)的相关文章

Codeforces Round #265 (Div. 2)

Codeforces Round #265 (Div. 2) 题目链接 A:把数字变换后比较一下几个不一样即可 B:连续2个以上0当作一次操作,开头的0和结尾的0可以忽略 C:贪心从末尾去构造,由于保证一开始是回文,所以保证修改后出现回文只可能为长度2或3的,这样的话判断复杂度就很小了 D:暴力枚举情况,然后判断 E:把操作逆过来处理出每个数字对应的位数和相应数字,然后在for一遍计算答案即可 代码: A: #include <cstdio> #include <cstring>

Codeforces Round #265 (Div. 2) 465A. inc ARG(数学题)

题目链接:http://codeforces.com/problemset/problem/465/A Sergey is testing a next-generation processor. Instead of bytes the processor works with memory cells consisting of n bits. These bits are numbered from 1 to n. An integer is stored in the cell in t

Codeforces Round #265 (Div. 2) 题解

A:给你一个二进制数,问你加一以后改变多少位 解题思路:乱搞 解题代码: 1 // File Name: a.cpp 2 // Author: darkdream 3 // Created Time: 2014年09月07日 星期日 23时27分31秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #includ

Codeforces Round #265 (Div. 2) B. Inbox (100500)

Over time, Alexey's mail box got littered with too many letters. Some of them are read, while others are unread. Alexey's mail program can either show a list of all letters or show the content of a single letter. As soon as the program shows the cont

Codeforces Round #265 (Div. 2) C. No to Palindromes!

Paul hates palindromes. He assumes that string s is tolerable if each its character is one of the first p letters of the English alphabet and s doesn't contain any palindrome contiguous substring of length 2 or more. Paul has found a tolerable string

Codeforces Round #265 (Div. 2) D. Restore Cube

Peter had a cube with non-zero length of a side. He put the cube into three-dimensional space in such a way that its vertices lay at integer points (it is possible that the cube's sides are not parallel to the coordinate axes). Then he took a piece o

Codeforces Round #279 (Div. 2) ABCD

Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name     A Team Olympiad standard input/output 1 s, 256 MB  x2377 B Queue standard input/output 2 s, 256 MB  x1250 C Hacking Cypher standard input/output 1 s, 256 MB  x740 D Chocolate standard input/

Codeforces Round #428 (Div. 2)

Codeforces Round #428 (Div. 2) A    看懂题目意思就知道做了 #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a; i<=b; ++i) #define per(i,b,a) for (int i=b; i>=a; --i

Codeforces Round #424 (Div. 2) D. Office Keys(dp)

题目链接:Codeforces Round #424 (Div. 2) D. Office Keys 题意: 在一条轴上有n个人,和m个钥匙,门在s位置. 现在每个人走单位距离需要单位时间. 每个钥匙只能被一个人拿. 求全部的人拿到钥匙并且走到门的最短时间. 题解: 显然没有交叉的情况,因为如果交叉的话可能不是最优解. 然后考虑dp[i][j]表示第i个人拿了第j把钥匙,然后 dp[i][j]=max(val(i,j),min(dp[i-1][i-1~j]))   val(i,j)表示第i个人拿