a題:a - distinct digits *800
題目大意:給你兩個數,l和r,問你在l到r之間的數中存不存在每個數字都不相同的數,存在輸出這個數,不存在輸出-1
思路:暴力就完事
#includeusing namespace std;
const int maxn=2e5+10;
int a[maxn],dp[maxn][5];
int main()
if(x==0)
for(
int j=
1;j<=m;j++
) x++;if
(mp[x]
[j]==
1)f=1;
else mp[x]
[j]=-1
;}int sum=0;
if(f)
for(
int i=
1;i<=n;i++)}
long
long
int ans=1;
for(
int i=
1;i<=sum;i++
) cout
}
c題:c - primes and multiplication 1600
數學題,思路:先把x的所有的質因子求出來。然後再用n除以它的每個質因子,例如1-n個數裡面有n/2個數能被2整除,則這些數都存在2的一次的因子,剩下的n/2個數再/2表示有n/2/2個數存在2的2次這個因子。除到最後加起來表示1-n個數總共可以被2分解t次,(t=n/2+n/2/2+…),然後再處理下乙個質因子。最後答案就是第乙個質因子的t次方第二個質因子對應的t次方…
#include
using
namespace std;
typedef
long
long
int ll;
const
int mod=
1e9+7;
vector<
int> e;
void
prime
(ll x)}}
if(x>
1)e.
push_back
(x);
}ll qp
(ll x,ll c)
tmp=tmp*tmp%mod;
c>>=1;
}return ans;
}int
main()
ans=ans*
qp(e[i]
,t)%mod;
} cout
}
d題:d - complete tripartite *1800
題目大意:給你一堆點一堆邊,問你能不能分成乙個三分圖,每個部分的點都能連到另外連個部分的任意乙個點
思路:正常思路是染色,先隨便找乙個點分到第一部分,然後把沒有和它有直線連線的點都加到第二部分,然後再處理第二部分,第二部分隨便找乙個點,把沒有和它直接相連的點全部弄成真的第二部分,剩下的如果不是第一部分的點加到第三部分,染完色再證明一下,每個點到其他部分每個點是不是有邊連線,每一部分存不存在點與點之間有邊的。
但是我在cf上發現有個很神奇的操作,用vector把和每個點有連線的點記錄下來,然後每個不同的連線點集進行map賦值,如果給的圖能按照要求分組,則不同的點集數量一定是三個,1的點部分對應2,3部分的點集是相同的,同理2對應1,3的點集也是相同的。如果正好三個點集,輸出點對應的點集編號,不然輸出-1
#include
using
namespace std;
const
int maxn=
3e5+10;
vector<
int> e[maxn]
;mapint>
,int
> mp;
intmain()
int cnt=0;
for(
int i=
1;i<=n;i++
)sort
(e[i]
.begin()
,e[i]
.end()
);if(
!mp[e[i]
])mp[e[i]]=
++cnt;}if
(cnt!=3)
puts
("-1");
else
for(
int i=
1;i<=n;i++
)return0;
}
CF貪心刷題記錄
339a 把乙個由數字和加號組成的字串按照數字從小到大的順序排序 思路 把字串s中的所有 過濾掉,然後對數字排序輸出。160a 給n個物品,每件物品有乙個價值,現在要求選擇最少的物品使得你所選擇的物品價值和大於剩餘物品的價值和 思路 排序,按照價值從大到小貪心 58a 給乙個字串,判斷是否刪除若干位...
cf水題記錄
記錄幾道水題 第一題題目鏈結 題目大意 給 n和m 問1 n裡面m的倍數中個位數的和是多少.某場div3的c題.n m肯定是1 n裡面m倍數的個數.那麼這些數裡面各位數的和怎麼算呢?分析一下可以知道最多10個數後就會進入迴圈.因為0 9只有10個數嘛.可以手動先把每個數的迴圈陣列算出來.當然這是最直...
CF做題記錄 二
d.ticket game description 給定乙個長度為 n 的數字串 n 為偶數 其中有一些位置的值被刪除了用 表示,有兩個人要在這個上面玩乙個遊戲。這兩個人會輪流把串中的問號替換成乙個數字 in 0,9 如果最後前一半所有數字的和等於後一半所有數字的和,那麼後手贏,否則先手贏。現在給定...