11 3號 模擬賽

2022-04-02 13:22:25 字數 3970 閱讀 6674

總分 40分

t1: 0分

t2: 0分

t3: 20分

t4: 20分

aliemo 有兩個數 a,b ,但是他想考考你,所以他想給你另外兩個數 x,y。
a+b 的值為 x ,a&b 的值為 y,首先需要判斷能否有一組 a,b 滿足當前的情況,如果有,那麼求出

a xor b,否則輸出 −1 (其中 a,b > 0 )

第一行為乙個正整數 t,表示組數。

接下來 t 行,每一行有兩個整數 x,y。

對於每一組資料,按題意輸出 a xor b 或者 −1
異或可以看做不進製加法,a&b也就是只有在都是一的時候才是1
考試暴力**(期望得分 30分,實際得分 0分):

#include #include #include #include #include #include #define int long long

using namespace std;

inline int read()

while(isdigit(ch))

return x*f;

}int a,b;

signed main()

}if(flag) break;

} if(flag) cout<<(pos1^pos2)《根據講完之後**:

#include#include#include#include#includeusing namespace std;

long long int read()

int main()

while(isdigit(ch))

return x*f;

}int map[302][302][26];

int sum[302][302][27];

int ans[302][302];

int k,n,m;

bool check(int l,int r,int mid)

} if(flag==0) return true;

else return false;

}int main()

} }for(int i=1;i<=n;i++)

else

}cout<2 4

1 6 3 5

1 43 4

1 21 2

1

3 3

3

正解**(和我的差不了多少):

#include #include #include #include #include #include #include const int maxn=1000000;

struct node

;node tree[maxn<<2];

inline int read()

while(isdigit(ch))

return x*f;

} void pushdown(int now)

else

return ;

}void build(int now,int left,int right)

int mid=left+right>>1;

build(now<<1,left,mid);

build(now<<1|1,mid+1,right);

tree[now].now=tree[now<<1].now+1;

pushdown(now);

} void updata(int now,int left,int right,int val,int k)

int mid=(left+right)>>1;

if(k<=mid)

else

pushdown(now);

}int main()

while(isdigit(ch))

return x*f;

} struct node

edge[maxn<<1];

int number_edge,head[maxn];

void add_edge(int from,int to,int i)

int a[maxn],n,m;

int dis[maxn],vis[maxn];

void dijistra(int x)

}} }

}int tumb[200][200];

int main()

for(int i=1;i<=m;i++)

int ans=0;

for(int i=1;i<=n;i++)

else if(a[j]!=a[i])

}} printf("%d",ans%mod);

return 0;

}

講完之後打出來的,40分**

#include #include #include #include #include #include #include #include #define int long long

#define inf 0x3f

const int maxn=200000;

const int mod=1e9+7;

struct node

;node edge[maxn<<2];

int number_edge,head[maxn<<1];

int point_to[maxn],a[maxn];

int size[maxn];

int dis[maxn];

int point;

int f[maxn<<1];

int n,m,number_point;

inline int read()

while(isdigit(ch))

return x*f;

}void add_edge(int from,int to,int weath)

int findx(int x)

return point_to[x];

}void dfs1(int x,int fa) }

void dfs2(int x,int fa)

} signed main()

int flag=(a[1] == 1);

for(int i=1;i<=n;i++)

for(int i=1;i<=m;i++)

while (c >= '0' && c <= '9')

return f * x;

}int n, m, a[maxn], fa[maxn];

inline int find(int x)

inline int qpow(int a, int b)

return sum;

}struct nodeedge[maxn];

int num, head[maxn];

inline void build(int u, int v, int w)

int size[maxn], w[maxn], sum, f[maxn];

void dfs(int u, int fa)

}void dfs1(int u, int fa)

}signed main()

dfs(1, 0);

sum = size[1];

for (int i = 1; i <= n; i++)

if (a[i])

f[1] += w[i], f[1] %= mod;

dfs1(1, 0);

int ans = 0;

for (int i = 1; i <= n; i++)

if (!a[i])

ans += f[i], ans %= mod;

cout << ans % mod;

return 0;

}

模擬113 題解

手玩發現這個東西好像有一點規律。考慮在最優的方案下,每增加乙個點對答案的貢獻 0 1 然後隨便寫寫就好了。把 x 向 x 能偷的節點建邊。發現這個東西一定會形成森林,其中一些樹為基環樹,其餘為普通形態的樹。對於普通形態的樹,顯然可以賺到其中所有能賺的錢。但基環樹對應著不能從環上乙個節點偷另乙個節點。...

NOIP模擬賽 准考證號

准考證號 128m 0.1s ticket.cpp 蒟蒻hzwer noip2014慘跪,他依稀記得他的准考證號是37,現在hzwer又將要面臨一場比賽,他希望准考證號不出現37 連續 同時他又十分討厭4,所以也不希望4出現在准考證號中。現在他想知道在a和b之間有多少合法的准考證號 包含兩個整數,a...

NOIP2014模擬11 3 蛋糕

今天是bessie的生日,他買了乙個蛋糕和朋友們一起分享,蛋糕可以看成是乙個r行c列的 共有r c個格仔,每個格仔都有乙個0至9的數字,表示該格仔蛋糕擁有的巧克力。現在bessie要把蛋糕橫的切3刀再豎的切3刀,由於bessie刀法厲害,所以每個格仔蛋糕都是完整的,顯然蛋糕會被切成16份,然後bes...