2018夏休み牛客多校(第3回)
9028 ワード
A-PACM Team
https://www.nowcoder.com/acm/contest/141/A4次元の01リュックサックですが、パスを記録するだけで、勉強になりました~
#include"bits/stdc++.h"
#define out(x) cout<
#define C(n,m) ((long long)fac[(n)]*inv[(m)]%MOD*inv[(n)-(m)]%MOD)
using namespace std;
typedef long long LL;
const int maxn=37;
short dp[maxn][maxn][maxn][maxn];
bool vis[maxn][maxn][maxn][maxn][maxn];
struct AAA
{
int c[5],v;
};
AAA a[maxn];
int C1,C2,C3,C4;
void bag01(int n,AAA t)
{
int c1=t.c[1],c2=t.c[2],c3=t.c[3],c4=t.c[4],v=t.v;
for(int i=C1;i>=c1;i--)
{
for(int j=C2;j>=c2;j--)
{
for(int k=C3;k>=c3;k--)
{
for(int l=C4;l>=c4;l--)
{
if(dp[i][j][k][l]1 ;
}
}
}
}
}
}
int main()
{
int N;
cin>>N;
for(int i=1;i<=N;i++)
{
for(int j=1;j<=4;j++)cin>>a[i].c[j];
cin>>a[i].v;
}
cin>>C1>>C2>>C3>>C4;
memset(vis,0,sizeof vis);
for(int i=1;i<=N;i++)
{
bag01(i,a[i]);
}
int cnt=0;
int ans[maxn];
memset(ans,0,sizeof(ans));
for(int i=N,j=C1,k=C2,l=C3,m=C4;i>=1&&j>=0&&k>=0&&l>=0&&m>=0;i--)
{
if(vis[i][j][k][l][m])
{
j-=a[i].c[1];
k-=a[i].c[2];
l-=a[i].c[3];
m-=a[i].c[4];
ans[i]=1;
cnt++;
continue;
}
}
cout<for(int i=1;i<=N;i++)
{
if(ans[i])cout<1<<" ";
}
cout<
C-Shuffle Cards
ライブラリ関数があるなんて...
#include"bits/stdc++.h"
#include"ext/rope"
#define out(x) cout<
using namespace __gnu_cxx;
using namespace std;
typedef long long LL;
const int maxn=1e6+5;
rope<int>ro;
int main()
{
int N,K;
cin>>N>>K;
for(int i=1;i<=N;i++)ro.append(i);
while(K--)
{
int L,len;
cin>>L>>len;
L--;
rope<int>tmp;
tmp=ro.substr(L,len);
ro.erase(L,len);
ro.insert(0,tmp);
}
for(int i=0;iprintf ("%d ",ro[i]);
printf("
");
}
H-Diff-prime Pairs
https://www.nowcoder.com/acm/contest/141/Hこの問題...私たちのチームがまだ髪の毛をつかもうと悩んでいる間に、ymfは私に渡してくれと言って、結局、パチパチして、過ぎてしまいました.....彼はまだ一年生ですね...どうやって生きましょうか...
标题:ymfの一言で思い出した~(2,3)(2,3)広ければ(4,6)(4,6)広ければ、(6,9)(6,9)広ければ、わあ~何か法則を見つけたようだ.gcd=1 g c d=1の2つの素数を探して、それから彼らの倍数も条件を満たして~最大倍数は何倍に達することができますか?N Nを一番大きいので割って、それからこの问题は终わります...
#include"bits/stdc++.h"
#define out(x) cout<
using namespace std;
typedef long long LL;
const int maxn=1e7+5;
vector<int> prime;
bool vis[maxn];
int cnt[maxn];
void PRIME(int NN)
{
memset(vis,1,sizeof(vis));
for(int i=2;i<=NN;i++)
{
if(vis[i])prime.push_back(i);
for(int j=0;j0 ;
if(i%prime[j]==0)break;
}
cnt[i]=prime.size();
}
}
int main()
{
PRIME(maxn-5);
int N;
while(cin>>N)
{
LL ans=0;
for(int i=2;i<=N;i++)
{
if(vis[i])
{
ans+=(cnt[i]-1)*(N/i);
}
}
cout<2<