A-digits 2
제목 링크:https://ac.nowcoder.com/acm/contest/885/A
제목 대의: n < = 100 을 제시 하고 조건 을 만족 시 키 는 정수: 1. 숫자의 합 시 n 의 배 수 를 구한다.2. 이 수 는 n 으로 나 눌 수 있다.3. 이 수 는 10000 위 를 넘 지 않 는 다.
사고방식: n 개 n, 조건 에 완벽 하 게 부합
ACCode:
int main(){
int T;scanf("%d",&T);
while(T--){
int n;scanf("%d",&n);
for(int i=1;i<=n;++i) printf("%d",n);printf(" ");
}
}
그러나 나 는 왜 이 코드 가 틀 렸 는 지 몰 랐 다. n 개 n 을 순서대로 더 했다.모두 100 개의 데이터 만 있 습 니 다. 저 는 모두 뛰 어 나 왔 습 니 다. 괜 찮 습 니 다. 하지만 WA 입 니 다.
#include
#include
#include
#include
#include
// srand(unsigned)time(NULL));rand();
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define Pii pair
#define clean(a,b) memset(a,b,sizeof(a))
using namespace std;
const int MAXN=2e5+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const ll MOD=1e9+7;
const double PI=acos(-1.0);
const double EPS=1.0e-8;
//unsigned register
// ios::sync_with_stdio(false)
int B[MAXN];
int main(){
//int T=100;
int T;scanf("%d",&T);
while(T--){
//int n=(100-T);
int n;scanf("%d",&n);
if(n<10){
printf("%d ",n);
continue;
}
if(n==100){
for(int i=1;i<=100;++i) printf("1");printf("00 ");
continue;
}
clean(B,0);
int a=n/10,b=n%10;
for(int i=1;i<=n;++i) B[i]=b;
for(int i=1;i<=n;++i) B[i+1]+=a;
for(int i=1;i<=n;++i){
if(B[i]/10) B[i+1]+=B[i]/10;
B[i]%=10;
}
int top=n+1;
while(B[top]/10){
B[top+1]=B[top]/10;
B[top]%=10;
++top;
}
for(int i=top;i>=1;--i) printf("%d",B[i]);printf(" ");
}
}
B-generator 1
제목 링크:https://ac.nowcoder.com/acm/contest/885/B
10 을 밑 으로 하 는 행렬 의 빠 른 속도:https://blog.csdn.net/henucm/article/details/98492753
C-generator 2
제목 링크:https://ac.nowcoder.com/acm/contest/885/C
수론 동료:https://blog.csdn.net/henucm/article/details/99682328
E-independent set 1
제목 링크:https://ac.nowcoder.com/acm/contest/885/E
문 이 적은 비트 압축 DP:https://blog.csdn.net/henu_1710252529/article/details/102639844
F-maximum clique 1
제목 링크:https://ac.nowcoder.com/acm/contest/885/F
제목 대의: n 개의 수, 하나의 최대 수의 집합 을 선택 하여 집합 내 임 의 두 개의 수 사이 에 적어도 두 개의 숫자 가 다르다.이 집합의 최대, 출력 점 을 구하 세 요.
사고방식: 임의의 두 개의 수가 가장 많 고 한 명의 서로 다른 수 연 변 을 강제로 2 분 도 를 만들어 서 자리수 의 짝 에 따라 두 개의 점 집 으로 구분한다.이분 도 일치.얻 은 일치 수량 이 가장 큰 점 집합 입 니 다.경 로 를 찾 는 데 있어 서 우 리 는 최대 흐름 을 달 린 후에 남 은 잔류 네트워크 에서 출발점 부터 찾 을 수 있 는 모든 것 이 전적 중의 점 이다.
ACCode:
#include
#include
#include
#include
#include
// srand(unsigned)time(NULL));rand();
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define PII pair
#define PLL pair
#define clean(a,b) memset(a,b,sizeof(a))
using namespace std;
const int MAXN=5e3+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const ll MOD=1e9+7;
const double PI=acos(-1.0);
const double EPS=1.0e-8;
//unsigned register
// ios::sync_with_stdio(false)
struct Node{
int v,val,nxt;
Node(int _v=0,int _val=0,int _nxt=0){
v=_v;val=_val;nxt=_nxt;
}
};
Node Edge[MAXN*100];
int Head[MAXN],Cur[MAXN],Ecnt;
int Dis[MAXN];
int Vis[MAXN],Belong[MAXN];
int A[MAXN];
int Ans[MAXN],tot;
int n,S,T;
void Intt(){
clean(Head,-1);Ecnt=0;
}
void AddEdge(int u,int v,int val){
Edge[Ecnt]=Node(v,val,Head[u]);
Head[u]=Ecnt++;
}
int Judge(int a,int b){
a^=b;
if((a&(a-1))==0) return 1;
return 0;
}
int SA(int a){
int Cnt=0;
while(a){
if(a&1) Cnt++;
a>>=1;
}return Cnt&1;
}
int BFS(){
clean(Dis,-1);Dis[S]=0;
queue que;que.push(S);
while(que.size()){
int u=que.front();que.pop();
if(u==T) return 1;
for(int i=Head[u];i+1;i=Edge[i].nxt){
int v=Edge[i].v;
if(Dis[v]==-1&&Edge[i].val>0){
Dis[v]=Dis[u]+1;
que.push(v);
}
}
}return 0;
}
int DFS(int u,int low){
if(u==T||low==0) return low;
int res=0;
for(int &i=Cur[u];i+1;i=Edge[i].nxt){
int v=Edge[i].v;
if(Dis[v]==Dis[u]+1&&Edge[i].val>0){
int f=DFS(v,min(low-res,Edge[i].val));
Edge[i].val-=f;Edge[i^1].val+=f;
res+=f;
if(res==low) break;
}
}return res;
}
int Dinic(){
int Ans=0;
while(BFS()){
for(int i=0;i<=T;++i) Cur[i]=Head[i];
Ans+=DFS(S,INF32);
}return Ans;
}
void DFSPath(int u,int fa=-1){
Vis[u]=1;
for(int i=Head[u];i+1;i=Edge[i].nxt){
int v=Edge[i].v;
if(Edge[i].val==0||v==fa||Vis[v]==1) continue;
DFSPath(v,u);
}
}
int main(){
Intt();scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",&A[i]);
for(int i=1;i<=n;++i){
for(int j=i+1;j<=n;++j){
if(Judge(A[i],A[j])){
int x=SA(A[i]),y=SA(A[j]);
if(x==1&&y==0){
AddEdge(i,j,1);AddEdge(j,i,0);
//printf(" %d %d ",A[i],A[j]);
}
else if(x==0&&y==1){
AddEdge(j,i,1);AddEdge(i,j,0);
//printf(" %d %d ",A[i],A[j]);
}
}
}
}S=0;T=n+1;
for(int i=1;i<=n;++i){
if(SA(A[i])){
Belong[i]=1;
AddEdge(S,i,1);AddEdge(i,S,0);
}
else{
Belong[i]=2;
AddEdge(i,T,1);AddEdge(T,i,0);
}
}
int MaxLow=Dinic();
printf("%d ",n-MaxLow);
DFSPath(S);
// for(int i=1;i<=n;++i){
// printf("A[i]=%d Vis=%d Belong%d ",A[i],Vis[i],Belong[i]);
// }
tot=0;
for(int i=1;i<=n;++i){
if(Belong[i]==1&&Vis[i]==1) Ans[++tot]=A[i];
else if(Belong[i]==2&&Vis[i]==0) Ans[++tot]=A[i];
}
for(int i=1;i<=tot;++i) printf("%d ",Ans[i]);printf(" ");
}
/*
6
4 3 8 2 6 5
*/
G-subsequence 1
제목 링크:https://ac.nowcoder.com/acm/contest/885/G
수론 동료:https://blog.csdn.net/henucm/article/details/98518989
H-subsequence 2
제목 링크:https://ac.nowcoder.com/acm/contest/885/H
제목: 길이 가 n 인 숨겨 진 문자열 입 니 다. 매번 두 자 모 를 표시 하고 원래 의 문자열 을 구 할 수 있 습 니 다.
사고방식: 표 시 된 자모 로 순서대로 토폴로지 그림 을 만 들 것 이다.토폴로지 정렬 을 진행 하 다.같은 문자 의 다른 수량 도 구분 해 야 한다.토폴로지 정렬 을 직접 하면 됩 니 다.
ACCode:
#include
#include
#include
#include
#include
// srand(unsigned)time(NULL));rand();
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define PII pair
#define PLL pair
#define clean(a,b) memset(a,b,sizeof(a))
using namespace std;
const int MAXN=1e6+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const ll MOD=1e9+7;
const double PI=acos(-1.0);
const double EPS=1.0e-8;
//unsigned register
// ios::sync_with_stdio(false)
struct Node{
int v,nxt;
Node(int _v=0,int _nxt=0){
v=_v;nxt=_nxt;
}
};
Node Edge[MAXN<<2];
int Head[MAXN<<2],Ecnt;
int InDeg[MAXN<<2];
PII Pos[MAXN];
map CI;int Icnt;// ,ch int
map IC;
char S[MAXN];
int Ans[MAXN<<2],tot;
int n,m;
void Intt(){
clean(Head,-1);Ecnt=0;
clean(InDeg,0);
Icnt=0;
for(int i=0;i<26;++i){
for(int j=1;j<=n;++j){
CI[make_pair(i,j)]=++Icnt;
IC[Icnt]='a'+i;
}
}tot=0;
}
void AddEdge(int u,int v){
Edge[Ecnt]=Node(v,Head[u]);
Head[u]=Ecnt++;
}
void Solve(){
queue que;
for(int i=1;i<=tot;++i){
if(InDeg[Ans[i]]==0) que.push(Ans[i]);
}tot=0;
while(que.size()){
int u=que.front();que.pop();
Ans[++tot]=u;
for(int i=Head[u];i+1;i=Edge[i].nxt){
int v=Edge[i].v;
--InDeg[v];
if(InDeg[v]==0) que.push(v);
}
}
}
int main(){
scanf("%d%d",&n,&m);Intt();
for(int i=1;i<=m;++i){
for(int j=i+1;j<=m;++j){
int len;scanf("%s%d",&S,&len);//
if(len==0) continue;// !!!
char a=S[0],b=S[1];
int cnta=0,cntb=0;
scanf("%s",&S);
for(int k=0;k
I-three points 1
제목 링크:https://ac.nowcoder.com/acm/contest/885/I
제목 대의: 높이 가 h 이 고 너비 가 w 인 사각형 에 세 변 을 넣 어 각각 a, b, c 의 삼각형 으로 한 조 의 정점 을 출력 합 니 다 (정점 순 서 를 주의 하 세 요)
사고방식: 세 가지 가 임의의 위치 에 있다.
ACCode:
#include
#include
#include
#include
#include
// srand(unsigned)time(NULL));rand();
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define PII pair
#define PLL pair
#define PDI pair
#define clean(a,b) memset(a,b,sizeof(a))
using namespace std;
const int MAXN=1e4+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const ll MOD=1e9+7;
const double PI=acos(-1.0);
const double EPS=1.0e-10;
//unsigned register
// ios::sync_with_stdio(false)
struct Point{
double x,y;
Point(double _x=0,double _y=0){
x=_x;y=_y;
}
};
Point A,B,C;
double l[5];
double W,H;
double GetAng(double a,double b,double c){
double ans=a*a+b*b-c*c;
ans/=(2.0*a*b);
return acos(ans);
}
int InRec(Point X){
if(X.x>-EPS&&X.x-EPS&&X.y
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
2019 우 객 다 교 5 차 전 A, B, C, E, F, G, H, I,
제목 링크:https://ac.nowcoder.com/acm/contest/885/A
제목 링크:https://ac.nowcoder.com/acm/contest/885/B
제목 링크:https://ac.nowcode...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.