C - Scc Puzzle
Time Limit: 2 sec / Memory Limit: 256 MB
Score : 300300 points
Problem Statement
Snuke loves puzzles.
Today, he is working on a puzzle using S- and c-shaped pieces. In this puzzle, you can combine two c-shaped pieces into one S-shaped piece, as shown in the figure below:

Snuke decided to create as many Scc groups as possible by putting together one S-shaped piece and two c-shaped pieces.
Find the maximum number of Scc groups that can be created when Snuke has NN S-shaped pieces and MM c-shaped pieces.
Constraints
- 1≤N,M≤10121≤N,M≤1012
Input
The input is given from Standard Input in the following format:
NN MM
Output
Print the answer.
Sample Input 1 Copy
Copy
1 6
Sample Output 1 Copy
Copy
2
Two Scc groups can be created as follows:
- Combine two
c-shaped pieces into one S-shaped piece - Create two
Scc groups, each from one S-shaped piece and two c-shaped pieces
Sample Input 2 Copy
Copy
12345 678901
Sample Output 2 Copy
Copy
175897
水题
#include <bits/stdc++.h>
using namespace std;
#define INF 0x7fffffff
#define PI acos(-1.0)
#define MOD 2520
#define E 1e-12
using namespace std;
typedef long long ll;
const int MAXN=500000+5;//最大元素个数
ll n,m;
int main()
{
scanf("%lld%lld",&n,&m);
if(2*n>=m)
{
cout<<min(n,m/2)<<endl;
}
else
{
ll cha=m-2*n;
//cout<<2*n<<" "<<cha<<endl;
cout<<n+cha/4<<endl;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define INF 0x7fffffff
#define PI acos(-1.0)
#define MOD 2520
#define E 1e-12
using namespace std;
typedef long long ll;
const int MAXN=500000+5;//最大元素个数
ll n,m;
int main()
{
scanf("%lld%lld",&n,&m);
if(2*n>=m)
{
cout<<min(n,m/2)<<endl;
}
else
{
ll cha=m-2*n;
//cout<<2*n<<" "<<cha<<endl;
cout<<n+cha/4<<endl;
}
return 0;
}
Submission Info
D - Menagerie
Time Limit: 2 sec / Memory Limit: 256 MB
Score : 500500 points
Problem Statement
Snuke, who loves animals, built a zoo.
There are NN animals in this zoo. They are conveniently numbered 11 through NN, and arranged in a circle. The animal numbered i(2≤i≤N−1)i(2≤i≤N−1) is adjacent to the animals numbered i−1i−1 and i+1i+1. Also, the animal numbered 11 is adjacent to the animals numbered 22 and NN, and the animal numbered NN is adjacent to the animals numbered N−1N−1 and 11.
There are two kinds of animals in this zoo: honest sheep that only speak the truth, and lying wolves that only tell lies.
Snuke cannot tell the difference between these two species, and asked each animal the following question: "Are your neighbors of the same species?" The animal numbered ii answered sisi. Here, if sisi is o, the animal said that the two neighboring animals are of the same species, and if sisi is x, the animal said that the two neighboring animals are of different species.
More formally, a sheep answered o if the two neighboring animals are both sheep or both wolves, and answered x otherwise. Similarly, a wolf answered x if the two neighboring animals are both sheep or both wolves, and answered o otherwise.
Snuke is wondering whether there is a valid assignment of species to the animals that is consistent with these responses. If there is such an assignment, show one such assignment. Otherwise, print -1.
Constraints
- 3≤N≤1053≤N≤105
- ss is a string of length NN consisting of
o and x.
Input
The input is given from Standard Input in the following format:
NN ss
Output
If there does not exist an valid assignment that is consistent with ss, print -1. Otherwise, print an string tt in the following format. The output is considered correct if the assignment described by tt is consistent with ss.
- tt is a string of length NN consisting of
S and W. - If titi is
S, it indicates that the animal numbered ii is a sheep. If titi is W, it indicates that the animal numbered ii is a wolf.
Sample Input 1 Copy
Copy
6 ooxoox
Sample Output 1 Copy
Copy
SSSWWS
For example, if the animals numbered 11, 22, 33, 44, 55 and 66 are respectively a sheep, sheep, sheep, wolf, wolf, and sheep, it is consistent with their responses. Besides, there is another valid assignment of species: a wolf, sheep, wolf, sheep, wolf and wolf.
Let us remind you: if the neiboring animals are of the same species, a sheep answers o and a wolf answers x. If the neiboring animals are of different species, a sheep answers x and a wolf answers o.

Sample Input 2 Copy
Copy
3 oox
Sample Output 2 Copy
Copy
-1
Print -1 if there is no valid assignment of species.
Sample Input 3 Copy
Copy
10 oxooxoxoox
Sample Output 3 Copy
Copy
SSWWSSSWW
题意:
n个动物,一种为羊,一种为狼,排成一圈,
如果是该位置是羊,他说o表示,两边动物是同一种,x表示两边动物不是同一种。
如果是该位置是狼,他说o表示,两边动物不是同一种,x表示两边动物是同一种。
分析:
只要前两个位置确定就可以推出全部。
#include <bits/stdc++.h>
using namespace std;
#define INF 0x7fffffff
#define PI acos(-1.0)
#define MOD 2520
#define E 1e-12
using namespace std;
typedef long long ll;
const int MAXN=500000+5;//最大元素个数
char ans[MAXN];
string s;
int n;
int solve(char ch1,char ch2)
{
ans[0]=ch1;
ans[1]=ch2;
for(int i=1;i<n;i++)
{
if(s[i]=='o')
{
if(ans[i]=='S')
ans[i+1]=ans[i-1];
else
{
if(ans[i-1]=='W')
ans[i+1]='S';
else
ans[i+1]='W';
}
}
else if(s[i]=='x')
{
if(ans[i]=='W')
ans[i+1]=ans[i-1];
else
{
if(ans[i-1]=='W')
ans[i+1]='S';
else
ans[i+1]='W';
}
}
}
char temp;
if(s[0]=='o')
{
if(ans[0]=='S')
temp=ans[1];
else
{
if(ans[1]=='W')
temp='S';
else
temp='W';
}
}
else
{
if(ans[0]=='W')
temp=ans[1];
else
{
if(ans[1]=='W')
temp='S';
else
temp='W';
}
}
if(ans[n]==ans[0]&&temp==ans[n-1]) return 1;
else return 0;
}
int main()
{
scanf("%d",&n);
cin>>s;
if(solve('S','S')==1)
{
for(int i=0;i<n;i++)
cout<<ans[i];
//cout<<ans<<endl;
}
else if(solve('S','W')==1)
{
for(int i=0;i<n;i++)
cout<<ans[i];
//cout<<ans<<endl;
}
else if(solve('W','S')==1)
{
for(int i=0;i<n;i++)
cout<<ans[i];
//cout<<ans<<endl;
}
else if(solve('W','W')==1)
{
for(int i=0;i<n;i++)
cout<<ans[i];
//cout<<ans<<endl;
}
else
{
cout<<-1<<endl;
}
return 0;
}










