Curling Solution (7pts, 10pts)
Problem
2022 is a year of the Winter Olympics! Curling has been one of the most popular winter sports as it requires skill, strategy, and sometimes a bit of luck.
In a curling game, two teams compete by sliding heavy granite stones on a long ice sheet. We call the teams the red team and the yellow team, as their stones are usually distinguished by the red and the yellow handle color. A curling game consists of several ends (subgames); in every end, the teams, each owning stones, take turns to slide them across the long ice sheet toward a circular target area called the house. A stone may hit existing stones to change its own moving direction and other stones' position (including knocking them out of play). Roughly speaking, the goal for a team is to make their stones as close to the center of the house as possible.
Geometrically, a house and a stone can be modeled as a circle and a disk (the region bounded by a circle), respectively, and the scoring rules at the conclusion of each end are formally summarized as follows.
- Each stone can be viewed as a disk of radius on a -dimensional plane.
- The house is a circle of radius centered at .
- Only stones in the house are considered in the scoring. A stone is in the house if any portion of the stone lies on or within the circle representing the house. Tangency also counts.
- A team is awarded point for each of their own stones in the house such that no opponent's stone is closer (in Euclidean distance) to the center than it. We assume in this problem that no two stones are equally close to the center .
Two teams are playing and have just delivered all their stones. The red team has stones remaining on the curling sheet, centered at , while the yellow team has stones remaining, centered at . Now you are asked to figure out the scores of both teams.
Input
The first line of the input gives the number of test cases, . test cases follow.
Each test case begins with a line containing the two space-separated integers and .
The next line contains the integer . Then lines follow, the -th line of which containing the two space-separated integers and .
After that, similarly, the next line contains the integer . In the next lines, the -th line contains the two space-separated integers and .
Output
For each test case, output one line containing Case #:
, where is the test case number (starting from 1), is the score of the red team, and is the score of the yellow team.
Limits
Time limit: 20 seconds.
Memory limit: 1 GB.
.
.
.
, for all .
, for all .
, for all .
, for all .
The distances between the center of each stone and the center of the house are distinct, i.e., no two stones are equally close to the center of the house.
No two stones overlap (but two stones can be tangent).
Test Set 1
.
Test Set 2
.
Sample
Note: there are additional samples that are not run on submissions down below.2 1 5 4 1 -1 6 1 0 6 -5 0 0 10 100 2 -3 -4 200 200 0
Case #1: 3 0 Case #2: 1 0
The following picture illustrates Sample Case #1. The big circle with a light blue interior represents the house, and the red disks represent the red team's stones.
In this case, the yellow team has no stones left in the house, so the red team receives a point for each of their stone in the house. All the existing stones are in the house except the one centered at (it would have touched the house boundary if it were centered at ), so the red team gets points.
Additional Sample - Test Set 2
The following additional sample fits the limits of Test Set 2. It will not be run against your submitted solutions.2 1 5 2 1 0 -3 0 1 0 2 10 50 2 -40 -31 -35 70 3 59 0 -10 0 30 40
Case #1: 1 0 Case #2: 0 2
The following picture illustrates Sample Case #1. Besides the big circle and the red disks, the yellow disk represents the yellow team's only remaining stone.
In this case, both teams have stones inside the house. The red stone at is in the house and no yellow stone is closer than it to the center of the house, so it is worthy of a point. Although the other red stone (centered at ) is also in the house, it is not worthy of a point because the yellow stone centered at is closer than it to the center . The yellow stone is not worthy of a point, either, due to the existence of the red stone at . Therefore, the red team gets point and the yellow team gets points.
5 Comments
#include
ReplyDeleteusing namespace std;
string caesarCipher(string s, int k) {
string ans="";
k%=26;
for(int i=0; i='a'&& c<='z'){
int j=c-'a';
j+=k;
j%=26;
char t='a'+j;
ans+=t;
}
else if(c>='A' && c<='Z'){
int j=c-'A';
j+=k;
j%=26;
char t='A'+j;
ans+=t;
}
else ans+=c;
}
return ans;
}
string decrypt(string s,int k){
string ans="";
k%=26;
for(int i=0; i='a'&& c<='z'){
int j=c-'a';
j-=k;
j%=26;
if(j<0)j+=26;
char t='a'+j;
ans+=t;
}
else if(c>='A' && c<='Z'){
int j=c-'A';
j-=k;
j%=26;
if(j<0)j+=26;
char t='A'+j;
ans+=t;
}
else ans+=c;
}
return ans;
}
int main()
{
string s;
getline(cin,s);
int k;
cin>>k;
string result = caesarCipher(s, k);
cout<<"Encrypted Text: "<<result<<endl;
cout<<"Decrypted Text: "<<decrypt(result,k)<<endl;
return 0;
}
#include
ReplyDelete#include
#include
using namespace std;
string encrypt(string s, int k){
string str="";
k= k%26;
int end1= 'z'-k;
int end2= 'Z'-k;
for(int i=0;i='a')||(ch<=(char)end2 && ch>='A')){
str+= (char) ch+k;
}
else if((ch>=(char)end1 && ch<='z')||(ch>=(char)end2 && ch<='Z')){
str+= (char)((ch+ k)-26);
}
else{
str+=ch;
}
}
return str;
}
string decrypt(string s, int k){
string str="";
k= k%26;
int end1= 'a'+k;
int end2= 'A'+k;
for(int i=0;i=(char)end1 && ch<='z')||(ch>=(char)end2 && ch<='Z')){
str+= (char) ch - k;
}
else if((ch<=(char)end1 && ch>='a')||(ch<=(char)end2 && ch>='A')){
str+= (char)((ch- k)+26);
}
else str+=ch;
}
return str;
}
int main() {
// Your code goes here;
string s;
cin>>s;
int k;
cin>>k;
cout<<"ENCRYPT"<<endl;
string ans= encrypt(s,k);
cout<<ans<<endl;
cout<<"DECRYPT"<<endl;
string code= decrypt(ans,k);
cout<<code<<endl;
}
#include
ReplyDelete#include
#include
using namespace std;
int main() {
// Your code goes here;
string s;
cin>>s;
unordered_mapmp;
for(auto c:s)mp[c]++;
for(auto it: mp){
cout<<it.first<<" occurs "<<it.second<<"times"<<endl;
}
return 0;
}
MAKE K = K+26 IF K<0
ReplyDeleteI don't know what are you talking about.
DeleteIf you have any doubts/suggestion/any query or want to improve this article, you can comment down below and let me know. Will reply to you soon.