標頭檔案見上一場的blog
題意:給你s和x,可能存在正數a+b=s,且a xor b=x,問a,b可能的組合有多少種
題解:s=a+b,則s=a ^ b+2*(a&b),^是只表示兩個數的相加,&是表示兩個數的進製,某一位的xor如果是1,那麼a和b在這一位必然乙個是1乙個是0,此時&必為0;如果某一位的xor是0,那麼在這一位的a和b都是確定的要麼都是1要麼都是0,至於是哪個,這個由其他位決定,所以不用管它們
ac**:
int
main()
else
if(a==
0)ans=ans-2;
printf
("%lld"
,ans);}
return0;
}
題意:有乙個字串,只包含a,b,c,每乙個字元都可以和b相連,a,c只能和自己相連,給出所有的字元相互連線情況,復原該字串(字串可能不存在
題解:二分圖染色——顯然ac之間不能連線,其實作題目的補圖,這個補圖就是二分圖了!標記所有連線情況,發現某個點和其他點都連線,填寫b,然後往下填,優先填a,如果有連線的格仔,也填a,不連線的話,填c。違規情況有兩種:i和j連線,但是乙個填了a乙個填了c;i和j沒有鏈結,但是他們填的是一樣的字母
ac**:
int n,m,flag=0;
int s[
800]
[800];
char ans[
600]
;void
dfs(
int i)
if(i!=j&&s[i]
[j]==1&&
((ans[i]
=='a'
&&ans[j]
=='c')||
(ans[i]
=='c'
&&ans[j]
=='a'))
)if(i!=j&&s[i]
[j]==
0&&ans[j]==0
)if(i!=j&&s[i]
[j]==
1&&ans[j]==0
)}}int
main()
for(
int i=
0;i(po==0)
ans[i]
='b';}
for(
int i=
0;iif(flag==1)
printf
("no");
else
return0;
}
題意:n個鈴鐺,m個箱子,n<=2m,鈴鐺體積從第乙個到最後乙個遞增,問要裝下所有的鈴鐺,箱子體積統一,那麼箱子最小要有多大
題解:由題意得,設有x個鈴鐺單獨裝箱,x=2m-n,這x個肯定是取最大的那幾個放,剩下的裡面最大+最小為一箱,不斷更新箱子體積就可以了
ac**:
int a[
150000];
intmain()
return0;
}
題意:給你乙個偶數,拆成兩個素數的解,問有多少種拆法
題解:暴力求解就好啦(囂張
ac**:
bool prime
(int n)
return true;}}
intmain()
}return0;
}
題意:乙個人從點1出發,走路經過若干條路去到某個點,再經由這個點走蟲洞(可能不止乙個)或者走路回到點1,且用時比去的時候少,問存在這種情況嗎
題解:bellman_ford,負權有向圖(是叫這個嗎),就是維護每個點到源點的距離,如果這個點到源點的用時少於它的來點+走到它的用時,說明存在情況
ac**:
int t,n,m,k;
struct node
;vectoredge;
vector<
int>g[
1000];
void
good
(int n)
void
addnode
(int from,
int to,
int dist));
int k=edge.
size()
; g[from]
.push_back
(k-1);
}bool bellman_ford
(int s)
}for
(int i=
0;isize()
;i++
)return false;
}int
main()
while
(k--)if
(bellman_ford(0
))printf
("yes\n");
else
printf
("no\n");
}return0;
}
題意:k的白花規模數,一把花有a~b朵花,一把花裡的花可以是紅花,或者紅花+k*n朵白花(n>=0);且每乙個k朵白花必須全部相連,比如說一把花有4朵,紅花是r白花是w,這把花可以是rrww,不可以是wrwr。給出a,b問有多少種花的組合方法
題解:dp,狀態轉移方程是:dp[i]=dp[i-1]+dp[i-k],dp[i-1]對應的是i位是紅花的情況,dp[i-k]對應的是第i位是白花的情況,如果i是白花,那麼i-k+1~i都是白花,dp[i]是對前面情況的繼承
ac**:
ll dp[
101000
],ans[
101000];
intmain()
for(
int i=
1;i<=
100005
;i++
)//for(int i=1;i<=5;i++)printf("**%lld %lld",dp[i],dp)
while
(n--)}
return0;
}
題意:有n個營地,每個營地有若干個士兵,可以對這些營地進行加兵,減兵,數兵的操作,數兵會給出範圍a~b,數兵的時候輸出總數
題解:線段樹維護區域性和,板子題
我學習的線段樹模板來自:點進去就好啦
ac**:
const
int maxn=
500010*4
;using namespace std;
int a[maxn]
;struct tree
node[maxn]
;void
pushup
(int i)
void
build
(int i,
int l,
int r)
int mid=
(l+r)/2
;build
(i<<
1,l,mid)
;build
((i<<1)
|1,mid+
1,r)
;pushup
(i);
}int
getsum
(int i,
int l,
int r)
void
add(
int i,
int k,
int v)
int mid=
(node[i]
.l+node[i]
.r)/2;
if(k<=mid)
add(i<<
1,k,v)
;else
add(
(i<<1)
|1,k,v)
;pushup
(i);
}int
main()
}return0;
}
SCAU2020春季個人排位賽div2 1 B
給出正整數 n 和 m,統計滿足以下條件的正整數對 a,b 的數量 1 a n,1 b m a b 是 2016 的倍數。input 輸入包含不超過 30 組資料。每組資料報含兩個整數 n,m 1 n,m 10e9 output 對於每組資料,輸出乙個整數表示滿足條件的數量。sample input...
scau2020春季排位賽 9 I題
給定長度為n的小寫字母字串,可以理解為給n個空位,然後每個位置有m個選擇即a開始往後數m 1個字母,接著這個重組的字串為原字串的子串,因為不會dp,所以就直接硬著頭皮算,我承認我有賭的成分 接著我們可以先把原字串挖掉乙個,比如現在為abc,我們先拿走c並用 表示那麼就可以表示為,ab,a b,ab ...
2014新生暑假個人排位賽06
時間限制 3000 ms 記憶體限制 65536 kb 小弱的學校很喜歡修路,現在給你一張他學校的地圖,地圖上有n個點和m條雙向邊,每條邊代表一條路,這條路有可能是暢通,也有可能正在修路。大家都知道修路使得交通很不方便。所有小弱很想學校快快的把路修好,使得他能夠很輕鬆的到達主樓915去刷題。但考慮到...