상태는 좋지 않다! ! ......
prob1 및 prob2, 빠는 질문, 연습은 기본 작업, 훈련주기, 연습 손 연습을하다 \ (일종의 \) : 코드의 재활용, 쓰레기,
\ (T1 \) :
#include<iostream>
#include<cstdio>
using namespace std;
#define in read()
#define fur(i,a,b) for(int i=a;i<=b;i++)
#define int long long
inline int read()
{
int x=0,f=1;char ch=getchar();
for(;!isalnum(ch);ch=getchar()) if(ch=='-') f=-1;
for(;isalnum(ch);ch=getchar()) x=x*10+ch-'0';
return x*f;
}
int ans[2];
signed main()
{
int t=in;
while(t--)
{
int n=in;
ans[0]=ans[1]=0;
fur(i,1,n) ans[i%2]+=in;
fur(i,1,n) ans[(i%2)^1]+=in;
printf("%lld\n",ans[0]>ans[1]?ans[1]:ans[0]);
}
return 0;
}
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define in read()
#define fur(i,a,b) for(int i=a;i<=b;i++)
#define jiba signed
const int xx=1e5+10;
inline int read()
{
int x=0,f=1;char ch=getchar();
for(;!isalnum(ch);ch=getchar()) if(ch=='-') f=-1;
for(;isalnum(ch);ch=getchar()) x=x*10+ch-'0';
return x*f;
}
int a[xx];
jiba main()
{
int t=in;
while(t--)
{
int n=in;
fur(i,1,n) a[i]=in;
sort(a+1,a+n+1);
if(a[1]<a[2]-1)
{
printf("%d\n",a[1]);
continue;
}
if(a[n]>a[n-1]+1)
{
printf("%d\n",a[n]);
continue;
}
fur(i,1,n)
{
if(a[i]==a[i+1])
{
printf("%d\n",a[i]);
break;
}
}
}
return 0;
}
prob5 : 접시 소유자
빠는 이산 세트 역시 결과는 조정할아버지반나절, \는 (\ 치오) , 코드에, 말을하지 않습니다 :
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define in read()
#define fur(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
inline int read()
{
int x=0,f=1;char ch=getchar();
for(;!isalnum(ch);ch=getchar()) if(ch=='-') f=-1;
for(;isalnum(ch);ch=getchar()) x=x*10+ch-'0';
return x*f;
}
const int xx=1e4+10;
int fa[xx],s[xx];
inline int find(int i){return i==fa[i]?i:(fa[i]=find(fa[i]));}
int main()
{
int t=in;
while(t--)
{
int n=in;
fur(i,1,n) fa[i]=i,s[i]=in;
int m=in;
while(m--)
{
int op=in;
if(op==0)
{
int x=in,y=in;
int u=find(x),v=find(y);
if(u==v)
{
puts("Invalid query!");
continue;
}
if(s[u]>s[v]) fa[v]=u;
else if(s[u]<s[v]) fa[u]=v;
}
else
{
int x=in;
printf("%d\n",find(x));
}
}
}
return 0;
}
prob3 : 요리 일정
어리버리 반이진 최대 길이는 일본어 문장에 참고 여부를 판정하는 때의 최대 길이 \ (K \) 의 시간 길이 \ (LEN \) \ (0 \) 또는 \ (1 \) 의 수정하기위한 최적의 분할 전략 \을 (LEN / (K + 1 ) \) 일 :
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define in read()
#define fur(i,a,b) for(int i=a;i<=b;++i)
#define jiba signed
inline int read()
{
int x=0,f=1;char ch=getchar();
for(;!isalnum(ch);ch=getchar()) if(ch=='-') f=-1;
for(;isalnum(ch);ch=getchar()) x=x*10+ch-'0';
return x*f;
}
const int xx=1e6+10;
int len[xx],all,need,ans1,ans2;
char op[xx];
inline bool check(int k)
{
int now=0;
fur(i,1,all)
{
if(len[i]>k)
{
int u=len[i];
now+=u/(k+1);
if(now>need) return false;
}
}
return true;
}
jiba main()
{
int t=in;
while(t--)
{
fur(i,1,all) len[i]=0;
int n=in,hd=2,tl=0;
all=0;need=in;
ans1=0;ans2=0;
scanf("%s",op);
len[++all]++;
op[0]-='0';
if(op[0]!=0) ans1++;
else ans2++;
fur(i,1,n-1)
{
op[i]=op[i]-'0';
if(op[i-1]!=op[i]) ++all;
if(op[i]!=i%2) ans1++;
else ans2++;
++len[all];
tl=max(tl,len[all]);
}
if(ans1<=need||ans2<=need)
{
puts("1");
continue;
}
int ans=tl;
while(hd<=tl)
{
int mid=(hd+tl)>>1;
if(check(mid)) tl=mid-1,ans=mid;
else hd=mid+1;
}
printf("%d\n",ans);
}
return 0;
}
prob6 : 세 쌍둥이
일부는하지이 소개에서, 30 하위 폭력으로 구분된다.
포지티브 수학 용액 식 푸시 식 열어 주어 : 현재 스위프 설정 \을 (B \) 시퀀스 번호는 \ (Y_p \) 는 \ (A \) 와 \ (C \) 시퀀스 (\ 정렬 \) 덜 \ (Y_p \) 의 \ (X_ {1-N} \) 와 \ (Z_ {. 1-m} \) , 우리는 다음과 같이 필요한 \ (\ sum_ I = {1 } N-} {^ \ sum_ {J} = ^ {m}. 1 (Y_p x_i로부터 +) * (+ Y_p Z_j) \) . 공통 인자는 물론, 단순화 (유사한 항목의 인수 합병)을 고려 ((\을 + Y_p x_i로부터) \) 의 발현에 \ (\ sum_ {난 = 1 } ^ {N} ((x_i로부터 + Y_p) * (\ sum_ {J = 1} ^ {m} Z_j +의 m * Y_p) ) \) . 이와 유사하게, 최종적으로하는 감소 ((\ sum_ {I = \ ) Y_p * 1} ^ {N} x_i로부터 + N * Y_p) * (\ sum_ {J = 1} ^ {m} Z_j +의 m을 \) . 이와 같이, 프로그램으로서 결정된다 (\ 정렬 \) 다음 하나씩 쓸어 \합니다 (Y는 \) 해결된다. 이 시점에서, 게임은 끝났습니다 :
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define in read()
#define fur(i,a,b) for(int i=a;i<=b;++i)
#define int long long
#define jiba signed
inline int read()
{
int x=0,f=1;char ch=getchar();
for(;!isalnum(ch);ch=getchar()) if(ch=='-') f=-1;
for(;isalnum(ch);ch=getchar()) x=x*10+ch-'0';
return x*f;
}
const int xx=1e5+10;
const int mod=1e9+7;
int a[xx],c[xx],b[xx];
jiba main()
{
int t=in+1;
while(--t)
{
int n=in,m=in,r=in;
fur(i,1,n) a[i]=in;sort(a+1,a+n+1);
fur(j,1,m) b[j]=in;sort(b+1,b+m+1);
fur(k,1,r) c[k]=in;sort(c+1,c+r+1);
int tmp1=0,tmp2=0,ans=0;
for(int i=1,j=1,k=1;j<=m;++j)
{
while(a[i]<=b[j]&&i<=n) tmp1=(tmp1+a[i])%mod,++i;
while(c[k]<=b[j]&&k<=r) tmp2=(tmp2+c[k])%mod,++k;
ans=(ans+(tmp1+(i-1)*b[j]%mod)%mod*(tmp2+(k-1)*b[j]%mod)%mod)%mod;
}
printf("%lld\n",ans);
}
return 0;
}
prob4 : CodeChef-SUBREM
트리 \합니다 (DP \) , 어레이 \ (F [I] \) 와 \ ([I]가 \ W)에 기록 된 \ (I는 \) 창 우측 서브 트리의 최대 점 및
전송 식 : \ (F [I] = 최대 (\ F SUM [아들 [I] [J], - W [I]를 -X-) \)
대상 : \ ([. 1] W [. 1] + F를 \)
두 번 \합니다 (DFS는 \) , 게임은 끝났어 :
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
#define in read()
#define fur(i,a,b) for(int i=a;i<=b;i++)
#define int long long
#define jiba signed
inline int read()
{
int x=0,f=1;char ch=getchar();
for(;!isalnum(ch);ch=getchar()) if(ch=='-') f=-1;
for(;isalnum(ch);ch=getchar()) x=x*10+ch-'0';
return x*f;
}
const int xx=1e5+10;
int f[xx],w[xx],x,fa[xx];
bool vis[xx];
vector<int>e[xx];
inline void dfs1(int g)
{
fur(i,0,(int)e[g].size()-1)
{
if(vis[e[g][i]]) continue;
vis[e[g][i]]=true;
fa[e[g][i]]=g;
dfs1(e[g][i]);
w[g]+=w[e[g][i]];
}
}
inline void dfs2(int g)
{
f[g]=0;
fur(i,0,(int)e[g].size()-1)
{
if(e[g][i]==fa[g]) continue;
dfs2(e[g][i]);
f[g]+=f[e[g][i]];
}
f[g]=max(f[g],-w[g]-x);
}
inline void init(int n)
{
fur(i,1,n)
{
vis[i]=false;
e[i].clear();
fa[i]=0;
}
}
jiba main()
{
int t=in+1;
while(--t)
{
int n=in;x=in;
fur(i,1,n) w[i]=in;
fur(i,1,n-1)
{
int x=in,y=in;
e[x].push_back(y);
e[y].push_back(x);
}
vis[1]=true;
dfs1(1);
dfs2(1);
printf("%lld\n",f[1]+w[1]);
init(n);
}
return 0;
}
\ (PS \) : 시험은 그 자세를 변경해야하면 바람직하게 \ (dabai \)