總分 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...