如約而至。
願不辜負。
說正事,不要因為寫得很快而沾沾自喜,對拍要快快快一點啊啊啊!
然後推的時候要用變數代替樣例資料,同時一定!要自己出資料。
還有,一定要在思路理清楚以後認真檢查一次程式的邏輯關係,是否能達到要求,尤其是常數的使用。
靜態差錯一!定!要!認真看每一句,清醒一點呀喂!
現在腦子不太好使,很容易想不出來,每抓住乙個可能的思路,不要因為問題而退縮,要想一下如果我要用這個方法的話我要怎麼解決!
t1:
題意:
給定一串行,求每個數&,|每個數的和。
分析:
把每一位畫出來會發現,針對當前數當前位是0或是1來進行處理即可。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define inf 2e8
#define clr(x) memset(x,0,sizeof(x))
#define maxen(x) memset(x,127,sizeof(x))
#define maxer(x) memset(x,31,sizeof(x))
#define minus(x) memset(x,-1,sizeof(x))
#define each(i,n,m) for(long long i=n;i#define eachrev(i,n,m) for(long long i=n;i>m;i--)
#define minn(a,b,c) min(a,min(b,c))
#define maxx(a,b,c) max(a,max(b,c))
#ifdef win32
#define lld "%i64d"
#else
#define lld "%lld"
#endif
#define proc "believe"
//for(long long i=1;i<=n;i++)
//(double) (ll) ll (long long)
//(double)clock()/clocks_per_sec
using
namespace
std;
const
long
long maxn=1e5+5;
const
long
long modd=1e9+7;
long
long n,a[maxn];
long
long b[20],c[20],ansb[maxn],ansc[maxn];
long
long read()
while(ch>='0'&&ch<='9')
return x*f;
}void init()
void work1()
for(int i=1;i<=n;i++)printf(lld" ",ansb[i]);
printf("\n");
for(int i=1;i<=n;i++)printf(lld" ",ansc[i]);
}int main()
t2:
題意:
要求從n個,每個有兩個不同顏色的盒子裡選出最多個數的盒子,使得其任意子集不會出現所有顏色數為偶數的情況。
分析:
對於兩個點繫結了的情況,考慮建圖,然後會發現,只要連成的圖成了環,則出現了所有點度為偶數的最小情況,所以不能選。針對這種情況就不能選,由於加上一條邊必須同時減去一條邊,而它們的取捨不會對後面造成不同(因為其本質都是環的一部分),貪心走下去就可以了。
其實本質就是對於每個連通分量選一棵樹。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define inf 2e8
#define clr(x) memset(x,0,sizeof(x))
#define maxen(x) memset(x,127,sizeof(x))
#define maxer(x) memset(x,31,sizeof(x))
#define minus(x) memset(x,-1,sizeof(x))
#define each(i,n,m) for(int i=n;i#define eachrev(i,n,m) for(int i=n;i>m;i--)
#define minn(a,b,c) min(a,min(b,c))
#define maxx(a,b,c) max(a,max(b,c))
#ifdef win32
#define lld "%i64d"
#else
#define lld "%lld"
#endif
#define proc "heart"
//for(int i=1;i<=n;i++)
//(double) (ll) ll (int)
//(double)clock()/clocks_per_sec
using
namespace
std;
const
int maxn=1e5+5;
const
int modd=1e9+7;
int tot,fin,sta;
int n,m,fa[maxn*2];
int read()
while(ch>='0'&&ch<='9')
return x*f;
}int findfa(int u)
void init()
}}void work()
int main()
t3:
題意:
對於t1,給出結果,輸出滿足的序列。
分析:
a&b+a|b=a+b,給的兩個序列剛好是這兩種運算,加起來解一下方程就可以了。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define inf 2e8
#define clr(x) memset(x,0,sizeof(x))
#define maxen(x) memset(x,127,sizeof(x))
#define maxer(x) memset(x,31,sizeof(x))
#define minus(x) memset(x,-1,sizeof(x))
#define each(i,n,m) for(long long i=n;i#define eachrev(i,n,m) for(long long i=n;i>m;i--)
#define minn(a,b,c) min(a,min(b,c))
#define maxx(a,b,c) max(a,max(b,c))
#ifdef win32
#define lld "%i64d"
#else
#define lld "%lld"
#endif
#define proc "problem"
//for(long long i=1;i<=n;i++)
//(double) (ll) ll (long long)
//(double)clock()/clocks_per_sec
using
namespace
std;
const
long
long maxn=1e5+5;
const
long
long modd=1e9+7;
long
long n,***,res,cal;
long
long tot[maxn],ans[maxn];
long
long read()
while(ch>='0'&&ch<='9')
return x*f;
}void init()
void work()
void debug()
int main()
NOIP模擬題 「與」(位運算)
因為是與運算,所以我們可以貪心地每次找最高位的,將他們加入到新的序列中,然後每一次在這個新的序列繼續找下乙個位。然後最後序列中任意兩個的與運算的值都是一樣的且是最大的。include include include include include include include include in...
NOIP模擬 位運算(trie樹 按位貪心)
題目描述 有q次操作,每次操作是以下兩種 1 加入乙個數到集合中 2 查詢,查詢當前數字與集合中的數字的最大異或值,最大and值,最大or值 輸入格式 第一行1個正整數q表示操作次數 接下來q行,每行2個數字,第乙個數字是操作序號op 1,2 第二個數字是x表示操作的數字 輸出格式 輸出查詢次數行,...
NOIP模擬 wall 最大生成樹
給出n個點,第i個點座標是 x i,y i 給出m條邊,第i條邊的權值是 w i 求將圖變成一顆樹所需要刪除邊的最小權值和。首先要看出座標其實是出題人使出的障眼法,把人往計算幾何引。看透問題後就知道這是求一顆最大生成樹。includeusing namespace std const int n 1...