牛客練習試合18 A+B題解
1389 ワード
牛客訓練試合18は問題aとbにサインしてから、cとdを見に行ったら自分のレベルでは解決できないはずだ.
まずa題の和をsとするいくつかの整数の最大積で、この問題の主な構想はsを3と2に分けることで、n>5の時、sをいくつかの3に分解して、それから2(あるいは4)で、4=2*2なので、4は実は2の効果と同じです.
そしてa題コードを添付します
それからb題で、時計回りの反時計回りの判断を見てランダム大法を使いたいと思って、ランダム大法は良いですが、何度もランダムにして、実はテーマの意味がとても簡単であることを発見して、それから自分で押しました
b題の構想を話しましょう、2点の間の傾きの判断をして、もし傾き>=0の辺数がn/2より大きいならば、反時計回りで、逆に時計回りです
まずa題の和をsとするいくつかの整数の最大積で、この問題の主な構想はsを3と2に分けることで、n>5の時、sをいくつかの3に分解して、それから2(あるいは4)で、4=2*2なので、4は実は2の効果と同じです.
そしてa題コードを添付します
#include
#include
using namespace std;
int main()
{
unsigned long long n,m,s;
int t;
cin>>t;
while(t--){
cin>>n;
if(n==1) s=1;
else if(n==2) s=2;
else if(n==3) s=3;
else if(n==4) s=4;
else if(n==5) s=6;
else{
s=1;
if(n%3==1) {
s=4;
m=(n-3)/3;
}
else {
m=n/3;
if(n!=m*3) s=n-m*3;
}
for(int i=0;i
それからb題で、時計回りの反時計回りの判断を見てランダム大法を使いたいと思って、ランダム大法は良いですが、何度もランダムにして、実はテーマの意味がとても簡単であることを発見して、それから自分で押しました
b題の構想を話しましょう、2点の間の傾きの判断をして、もし傾き>=0の辺数がn/2より大きいならば、反時計回りで、逆に時計回りです
#include
#include
#include
#include
using namespace std;
struct Point{
int x,y;
}s[30];
int main()
{
srand((unsigned)time(NULL));
int n,m;
int sum=0;
cin>>n;
for(int i=0;i>s[i].x>>s[i].y;
for(int i=0;i= 0) sum++;
}
if(sum>=(n-sum)) cout<